【发布时间】:2019-07-12 16:58:31
【问题描述】:
我只想在第二列满足条件时编辑 df 的列,并且还要跟踪条件何时为假。这样做的适当方法是什么?
我尝试过使用ifelse(),但始终执行真假代码。另外,这似乎是错误的方法,因为我不想要ifelse 向量输出。 (这里我只想评估每个ID的第一行)。
df <- data.frame(id = rep(c(1,2,3), each = 2), value = rep(c(4,7,-8),
each = 2), new_val = rep(0, each=6))
neg_val <- vector()
ifelse(df[!duplicated(df$id), "value"] > 0,
df[!duplicated(df$id), "new_val"] <- df[!duplicated(df$id),"value"],
neg_val <- append(neg_val, df[!duplicated(df$id), "id"]))
[1] 4 7 3
> neg_val
[1] 1 2 3
ifelse 的输出与我预期的一样,是正值或负值的 ID。但是df 会针对所有值进行更新,而不仅仅是当value > 0 和neg_val 包含所有ID 而我只想要values =< 0 的ID 时。期望的输出:
> df
id value new_val
1 1 4 4
2 1 4 0
3 2 7 7
4 2 7 0
5 3 -8 0
6 3 -8 0
> neg_val
[1] 3
【问题讨论】:
-
您不想更新
new_val中的第一行重复项吗?这就是我得到的。请澄清。最好的办法是使用 edit(不在 cmets 中)将您想要的df输出添加到问题正文中。
标签: r if-statement apply