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

时间:2016-04-04 04:30:55

标签: r if-statement

我的数据框如下所示

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

提前致谢

1 个答案:

答案 0 :(得分:1)

NULL适用于您的数据是一个列表,而不是您正在做的事情。

首先,您在data.frame中找不到NA条目。 NULL,当然,但不是is.na(),所以你应该在if(x==TRUE)工作。接下来,您不需要测试if(x); R知道如何使用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 更改了一列。

enableProguardInReleaseBuilds=true