我正在尝试替换数据集的一些过滤值。到目前为止,我写了这行代码:
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?
答案 0 :(得分:1)
<-
),否则dplyr不会创建新对象。
比较
require(dplyr)
data(mtcars)
mtcars %>% filter(cyl == 4)
与
mtcars4 <- mtcars %>% filter(cyl == 4)
mtcars4
数据相同,但在第二个示例中,过滤后的数据存储在新对象mtcars4