【发布时间】:2016-03-10 12:40:10
【问题描述】:
我正在尝试替换数据集的一些过滤值。到目前为止,我写了这行代码:
df %>%
filter(group1 == uniq[i]) %>%
mutate(values = ifelse(sum(values) < 1, 2, NA)),
其中 uniq 只是一个包含我想要关注的变量名的列表(并且 group1 和 values 是列名)。这实际上是有效的。但是,它只输出更改后的过滤行,不会替换数据集 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
【问题讨论】:
-
如果要在原始数据集中替换 1) 您必须将输出分配回
df即df <- df %>%..或使用 magrittr%<>%运算符。 2) 我假设您只对 'group1' 中同样为uniq[1]的值感兴趣,需要替换。在那种情况下df <- df %>% mutate(values = ifelse(sum(values) <1 & group1==uniq[1], 2, NA)) -
嗯...谢谢您的回复。但是,如果我使用您的第一次尝试,它会将条件应用于整个数据集,而不仅仅是 group1 == uniq[1] 的子集。第二种方法只是用 group == uniq[1] 的更改值覆盖 df(但所有其他行都消失了)。
-
那么,我不知道你在说什么。没有可重现的示例和预期的输出,这并不容易
-
对不起 - 你是完全正确的。我会上传一个!