首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用in -使用mutate获得R中的新列

如何使用in -使用mutate获得R中的新列
EN

Stack Overflow用户
提问于 2021-02-23 22:00:13
回答 3查看 38关注 0票数 0

下面是我的数据的一个简单示例

代码语言:javascript
复制
 Id   x   y   
 12 Yellow  Yellow    
 13 Yellow  Blue      
 10 Blue    Yellow    
 14 Blue    Blue      
 19 Yellow  Yellow    

我想要得到这个

代码语言:javascript
复制
Id  x   y   z
12  Yellow  Yellow  Y
13  Yellow  Blue    N
10  Blue    Yellow  N
14  Blue    Blue    N
19  Yellow  Yellow  Y

当x和y只为黄色时,我得到z列的Y,否则N

我试过了,但对我没有帮助。

代码语言:javascript
复制
dat%>% mutate(z=ifelse(x=="Yellow") & (ifelse(y=="yellow")),"Y","N")

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-23 22:28:09

这行得通吗?

代码语言:javascript
复制
dat %>% mutate(z=ifelse(x=="Yellow" & y == "Yellow", "Y", "N"))

或者这个:

代码语言:javascript
复制
dat %>% mutate(z=ifelse(tolower(x)=="yellow" & tolower(y) == "yellow", "Y", "N"))
票数 1
EN

Stack Overflow用户

发布于 2021-02-23 22:02:41

我们不需要两个ifelse。此外,第一和第二的ifelse只有“测试”条件,没有“是”或“否”,也就是说,根据?ifelse,用法是

ifelse(测试,是,否)

在OP的帖子中,ifelsetest条件下被关闭

代码语言:javascript
复制
ifelse(y=="yellow")
         ^test condition

对于多个元素,而不是==,可以使用%in%

代码语言:javascript
复制
dat$z <- c("N", "Y")[Reduce(`&`, lapply(dat[-1], `%in%`, c('yellow', 'Yellow'))) + 1]
dat$z
#[1] "Y" "N" "N" "N" "Y"
票数 1
EN

Stack Overflow用户

发布于 2021-02-23 22:32:24

这里有一个没有ifelse的基本R选项

代码语言:javascript
复制
transform(
  df,
  z = c("N", "Y")[1 + (rowSums(cbind(x, y) == "Yellow") == 2)]
)

这给

代码语言:javascript
复制
  Id      x      y z
1 12 Yellow Yellow Y
2 13 Yellow   Blue N
3 10   Blue Yellow N
4 14   Blue   Blue N
5 19 Yellow Yellow Y
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66341731

复制
相关文章

相似问题

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