r - R中带有magrittr和dplyr的条件数据框突变

标签 r dplyr magrittr

我想使用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所在的行,我想将xy的值替换为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中的值,而不是分别用xy替换。

谢谢你的建议。

最佳答案

您可以使用mutate_eachreplace来做到这一点:

df %>% mutate_each(funs(replace(., a==5, nth(., which(b==7)))), x, y)


输出:

  a  b  x  y
1 1  6 11 16
2 2  7 12 17
3 3  8 13 18
4 4  9 14 19
5 5 10 12 17


或按照@docendodiscimus的注释,它可以进一步缩短为(可能[也比which好):

df %>% mutate_each(funs(replace(., a==5, .[b==7])), x, y)

关于r - R中带有magrittr和dplyr的条件数据框突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160769/

相关文章:

r - 具有分位数和其他功能的 dplyr summarise_all

r - 如何更新 data.table 中动态选择的列

r - 使用 purrr 和 Expand.grid 来循环 t.test 的公式,同时调节另一个变量

R 中逻辑回归的 ROC

r - Googleway R 替代路线

r - 在rapply中获取元素名称

r - 使用 group_by 时发生 mutate_at 评估错误

r - 将函数参数传递给 dplyr select

r - 将 ggsave 与管道一起使用

r - 获取 system.time 或使用管道复制工作 %>%