我希望利用magrittr和dplyr的简洁性,根据其他列中的值,在子集列之间复制单个值。这是一个简单的例子; 我想将此想法应用于多个条件下的大型数据集的许多列,并在一系列命令中使用。
以数据框df <- data.frame(a = 1:5, b = 6:10, x = 11:15, y = 16:20)
为例:
a b x y
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
对于当 a = 5
的那一行,我想用 b = 7
的那一行的值替换 x
和 y
的值,以得到:
a b x y
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 12 17
这个尝试失败了:
foo <- function(x){ifelse(df$a == 5, df[df$b == 7, .(df$x)], x)}
df %<>% mutate_each(funs(foo), x, y)
我能够提供的最接近的翻译是:
bar <- function(x){ifelse(df$a == 5, df[df$b == 7, "x"], x)}
df %<>% mutate_each(funs(bar), x, y)
但是这是错误的,因为它将两个值都替换为x
的值,而不是分别替换为x
和y
的值。
感谢您的建议。
%<>%
和%>%
有什么区别? - Marcinx %<>% f
出自于magrittr
包,等同于常见的模式x <- x %>% f
。 - asachet%>%
也来自于magrittr
包... - David Arenburg%>%
只需要加载dplyr
,而在目前和 CRAN 版本中使用%<>%
则需要加载magrittr
。确实,%>%
是通过dplyr
从magrittr
中引入的,但对于最终用户来说,知道要加载哪些包更为相关! - asachet