首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据帧中应用函数,并在R中使用if/else语句

在数据帧中应用函数,并在R中使用if/else语句
EN

Stack Overflow用户
提问于 2016-04-04 04:30:54
回答 1查看 6.6K关注 0票数 1

我的数据框架如下所示

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
if X3==NULL then X4=NULL
elseif X3==TRUE then X4=X1+X2 
else X4=X1-X2

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 04:54:41

lapply用于当数据是一个列表时,这不是您要做的事情。

首先,在NULL中找不到data.frame条目。NA,当然,但不是NULL,所以您应该使用is.na()。接下来,您不需要测试if(x==TRUE);R知道如何使用if(x)。好吧,那就谈正事吧,你大部分时间都带着你的ifelse去了。您可以为ifelse的输出分配一个向量,它将为您处理向量化。

代码语言:javascript
运行
复制
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更改一列。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36394605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档