仅当第二列满足条件时,我才想编辑df的列,并且还要跟踪条件何时为假。什么是合适的方法?
我尝试使用ifelse()
,但总是会执行true和false代码。另外,由于我不希望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
的ID时,neg_val
和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
答案 0 :(得分:0)
这是什么?是您要找的东西吗?
df[!duplicated(df$id), "new_val"]<-ifelse(df[!duplicated(df$id), "value"] > 0,
df[!duplicated(df$id), "new_val"] <- df[!duplicated(df$id),"value"],
df[!duplicated(df$id), "new_val"] <- df[!duplicated(df$id),"id"])
neg_val<-ifelse(df[!duplicated(df$id), "value"] > 0,
NA,df[!duplicated(df$id),"id"])
neg_val<-na.omit(neg_val)