首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件创建具有值的新列

根据条件创建具有值的新列
EN

Stack Overflow用户
提问于 2020-06-26 11:39:39
回答 4查看 66关注 0票数 0

我需要创建一个基于第三列的值列。示例:

代码语言:javascript
复制
df <- data.frame(antibodies = c("positive","positive","positive","positive",
                            "negative","negative","negative","negative",
                            "negative","positive","positive","negative"),
             AA = c(123, 345, 7567, 234, 8679, 890, 
                    812, 435345, 567, 568, 786, 678),
             stringsAsFactors = F)

我想要创建一个名为df$BB的新列,为了使这个列具有以下两个条件:

  • ,如果抗体阳性,则BB= AA+2
  • ,如果抗体为阴性,则BB== AA

我怎么用R来表达这个?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-26 11:50:19

以下是一次尝试:

代码语言:javascript
复制
# Base R
df$BB <- ifelse(df$antibodies == "positive", df$AA + 2, df$AA)

# Dplyr
library(dplyr)
df <- df %>% 
  mutate(BB = if_else(antibodies == "positive", AA + 2, AA))
票数 4
EN

Stack Overflow用户

发布于 2020-06-26 11:52:15

使用within

代码语言:javascript
复制
df <- within(df, {
  BB <- AA
  BB[antibodies == "positive"] <- BB + 2
})
df
#    antibodies     AA     BB
# 1    positive    123    125
# 2    positive    345    347
# 3    positive   7567   7569
# 4    positive    234    236
# 5    negative   8679   8679
# 6    negative    890    890
# 7    negative    812    812
# 8    negative 435345 435345
# 9    negative    567    567
# 10   positive    568    570
# 11   positive    786    788
# 12   negative    678    678
票数 2
EN

Stack Overflow用户

发布于 2020-06-26 11:53:54

使用base Rifelse-function:

代码语言:javascript
复制
df$BB <- ifelse(df$antibodies=="positive", df$AA + 2, df$AA)

或与with相结合

代码语言:javascript
复制
df$BB <- with(df, ifelse(antibodies=="positive", AA + 2, AA))

返回

代码语言:javascript
复制
   antibodies     AA     BB
1    positive    123    125
2    positive    345    347
3    positive   7567   7569
4    positive    234    236
5    negative   8679   8679
6    negative    890    890
7    negative    812    812
8    negative 435345 435345
9    negative    567    567
10   positive    568    570
11   positive    786    788
12   negative    678    678

另一个解决办法是

代码语言:javascript
复制
df$BB <- as.numeric(df$antibodies == "positive") * 2 + df$AA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62593945

复制
相关文章

相似问题

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