【发布时间】:2016-03-13 15:52:10
【问题描述】:
我想使用 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所在的行,我想将x和y的值替换为b = 7所在行的值,给出:
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。
感谢您的建议。
【问题讨论】:
-
%<>%和%>%之间的区别是什么? -
x %<>% f来自magrittr包,相当于普通模式x <- x %>% f。 -
%>%也来自magrittr包... -
@DavidArenburg
%>%将仅在加载dplyr的情况下工作,而目前使用 CRAN 版本,使用%<>%需要加载magrittr。没错,%>%来自magrittr到dplyr,但对于最终用户来说,知道要加载哪些包更相关! -
@antoine-sac 好吧,这就是你的意见,伙计。