基于if语句编辑两个不同对象的适当方法是什么?

时间:2019-07-12 16:58:31

标签: r if-statement apply

仅当第二列满足条件时,我才想编辑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_valvalues =< 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

1 个答案:

答案 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)