首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量条件赋值到R中的dataframe

将变量条件赋值到R中的dataframe
EN

Stack Overflow用户
提问于 2021-01-04 17:04:35
回答 1查看 36关注 0票数 0

我的数据框

代码语言:javascript
复制
 A tibble: 6 x 3
  ENSEMBL           RNA   ATAC
  <chr>           <dbl>  <dbl>
1 ENSG00000230368 -2.97 -3.33 
2 ENSG00000067606 -2.37  5.08 
3 ENSG00000078900  1.99 -0.721
4 ENSG00000235169 -1.74 -1.75 
5 ENSG00000116254  2.03 -0.156
6 ENSG00000173662  3.68 -4.00 

dput(head(dat))
structure(list(ENSEMBL = c("ENSG00000230368", "ENSG00000067606", 
"ENSG00000078900", "ENSG00000235169", "ENSG00000116254", "ENSG00000173662"
), RNA = c(-2.97191791457744, -2.37449980658652, 1.99184229821186, 
-1.74292940411696, 2.03328766113218, 3.68062522542837), ATAC = c(-3.3250605, 
5.0795755229987, -0.720667666666667, -1.74733, -0.155942, -4.004811
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

我的目标是看看如果两列都是负数,那么我会分配一个字符串"UP“,如果两列都是正数,那么字符串"DOWN”,如果两列都是负数。因此,为了做到这一点,我执行以下操作。

代码语言:javascript
复制
dat[4] <- data.frame(AB = dat$RNA*dat$ATAC) # creating another column where Im taking the product of both RNA and ATAC column.

The this

代码语言:javascript
复制
dat[4] <- ifelse(dat[, 4] > 0, "UP", "DOWN")

这就给了我这个

代码语言:javascript
复制
    ENSEMBL           RNA   ATAC AB   
  <chr>           <dbl>  <dbl> <chr>
1 ENSG00000230368 -2.97 -3.33  UP   
2 ENSG00000067606 -2.37  5.08  DOWN 
3 ENSG00000078900  1.99 -0.721 DOWN 
4 ENSG00000235169 -1.74 -1.75  UP   
5 ENSG00000116254  2.03 -0.156 DOWN 
6 ENSG00000173662  3.68 -4.00  DOWN 

这里的问题是第4行,两者都是负的,但我仍然看到“向上”。这应该是“下降的,但由于两个负面因素都会给出一个积极的产品,所以我认为它是”上升的“。

如何解决这个问题?如果两列都是负的,那么第四列应该是"DOWN“,如果RNA和ATAC列都是正的,那么我会在第四列看到"UP”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 17:11:02

如果一个是正的,另一个是负的呢?下面的答案将NA赋值给它。

代码语言:javascript
复制
library(dplyr)
dat %>%
  mutate(AB = case_when(RNA < 0 & ATAC < 0 ~ 'Down', 
                        RNA > 0 & ATAC > 0 ~ 'Up'))

您还可以使用sign,其中1为正,-1为负,0表示0值。

代码语言:javascript
复制
transform(dat, AB = ifelse(sign(RNA) == -1 & sign(ATAC) == -1, 'Down', 
                         ifelse(sign(RNA) == 1 & sign(ATAC) == 1, 'Up', NA)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65560067

复制
相关文章

相似问题

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