繁体   English   中英

在 R 中使用 if/else 语句在数据框中应用函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM