我有一个数据框看起来像下面
data.1 <- data.frame(
X1 = 6:10,
X2 = 1:5,
X3 = c(TRUE,FALSE,TRUE,FALSE,TRUE)
)
X1 X2 X3
1 6 1 TRUE
2 7 2 FALSE
3 8 3 TRUE
4 9 4 FALSE
5 10 5 TRUE
我想使用以下逻辑创建一个新列X4:
if X3==NULL then X4=NULL
elseif X3==TRUE then X4=X1+X2
else X4=X1-X2
提前致谢
lapply
用于当您的数据是列表时,而不是您在做什么。
首先,您不会在中找到NULL
条目data.frame
。NA
,当然可以,但是不可以NULL
,因此您应该围绕进行工作is.na()
。接下来,您不需要测试if(x==TRUE)
;R知道如何使用if(x)
。好吧,那么正事了;你大部分时间都和你在一起ifelse
。您可以将向量分配给的输出,ifelse
它将为您处理向量化
data.1$X4 <- ifelse(is.na(data.1$X3),
NA,
ifelse(data.1$X3==TRUE,
data.1$X1+data.1$X2,
data.1$X1-data.1$X2))
data.1
## X1 X2 X3 X4
## 1 6 1 TRUE 7
## 2 7 2 FALSE 5
## 3 8 3 TRUE 11
## 4 9 4 FALSE 5
## 5 10 5 TRUE 15
那太丑了。dplyr
包括非标准评估,该评估涉及在名称空间中搜索列,因此您不必每次引用引用列时都引用数据名称,这使它更加简洁。dplyr::mutate
更改列。
library(dplyr)
mutate(data.1, X4 = ifelse(is.na(X3),
NA,
ifelse(X3,
X1+X2,
X1-X2)))
data.1
## X1 X2 X3 X4
## 1 6 1 TRUE 7
## 2 7 2 FALSE 5
## 3 8 3 TRUE 11
## 4 9 4 FALSE 5
## 5 10 5 TRUE 15
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句