使用R Package dplyr替换data.frame子集的问题

时间:2016-03-10 12:40:11

标签: r package dplyr

我正在尝试替换数据集的一些过滤值。到目前为止,我写了这行代码:

df %>%
  filter(group1 == uniq[i]) %>%
  mutate(values = ifelse(sum(values) < 1, 2, NA)),

其中uniq只是一个包含我想要关注的变量名的列表(而group1和值是列名)。这实际上是有效的。但是,它仅输出已更改的已过滤行,并且不会替换数据集df中的任何内容。有谁有想法,我的错误在哪里?非常感谢!以下代码是重现示例:

group1 <- c("A","A","A","B","B","C")
values <- c(0.6,0.3,0.1,0.2,0.8,0.9)
df = data.frame(group1, group2, values)
uniq <- unique(unlist(df$group1))

for (i in 1:length(uniq)){
  df <- df %>%
  filter(group1 == uniq[i]) %>%
    mutate(values = ifelse(sum(values) < 1, 2, NA))
}

我想得到的是它除了最后一个之外还留下了所有值,因为它是一个唯一的组(group1 == C)和0.9&lt;所以我想在这里获得完全相同的数据框,除了用NA代替0.9。此外,是否可以使用if而不是ifelse?

1 个答案:

答案 0 :(得分:1)

除非使用赋值运算符(<-),否则

dplyr不会创建新对象。

比较

require(dplyr)
data(mtcars)

mtcars %>% filter(cyl == 4)

mtcars4 <- mtcars %>% filter(cyl == 4)
mtcars4

数据相同,但在第二个示例中,过滤后的数据存储在新对象mtcars4