簡體   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