[英]How apply a function in data frame with if/ lessthan statement in R?
[英]apply a function in data frame with if/else statement in R
我有一個如下所示的數據框
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
用於當您的數據是列表時,這不是您在做什么。
首先,您不會在data.frame
找到NULL
條目。 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.