根据另一列的值替换一列中的值

时间:2019-08-20 07:06:38

标签: r

我之前在“一列中的值取决于另一列的值” 方面获得了很好的帮助,我希望q1中2的所有值在q2中给出0。建议之一解决了这个问题:df$q2[df$q1 == 2] <- 0

现在我想知道当仅在q1 = 2和q2 = NA时要替换时该怎么做。因为有时候q1为2时q2中会有一个值,所以我想保留。

提前谢谢! :)

a <- rep(c(300,450), each=c(3,3))
q1 <- rep(c(1,1,2,1,1,2),2)
q2 <- c(100,40,"",80,30,"" , 45,78,"",20,58,"")

df <- cbind(a,q1,q2)
df <- as.data.frame(df)
df
     a q1  q2
1  300  1 100
2  300  1  40
3  300  2  30  
4  450  1  80
5  450  2  35
6  450  2    
7  300  1  45
8  300  1  78
9  300  2    
10 450  1  20
11 450  1  58
12 450  2

2 个答案:

答案 0 :(得分:0)

要表示空值,可以使用NA代替""

a <- rep(c(300,450), each=c(3,3))
q1 <- rep(c(1,1,2,1,1,2),2)
q2 <- c(100,40,NA,80,30,NA, 45,78,NA,20,58,NA)
df <- data.frame(a,q1,q2, stringsAsFactors = FALSE)

然后您可以通过添加其他条件来检查NA

df$q2[df$q1 == 2 & is.na(df$q2)] <- 0

但是,当前代码可能需要处理数据

df$q2[df$q1 == 2 & df$q2 == ""] <- 0

答案 1 :(得分:0)

这里是data.table

的一个选项
library(data.table)
setDT(df)[q1 == 2 & is.na(q2), q2 := 0]