我的数据框
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”,如果两列都是负数。因此,为了做到这一点,我执行以下操作。
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
dat[4] <- ifelse(dat[, 4] > 0, "UP", "DOWN")这就给了我这个
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”。
发布于 2021-01-04 17:11:02
如果一个是正的,另一个是负的呢?下面的答案将NA赋值给它。
library(dplyr)
dat %>%
mutate(AB = case_when(RNA < 0 & ATAC < 0 ~ 'Down',
RNA > 0 & ATAC > 0 ~ 'Up'))您还可以使用sign,其中1为正,-1为负,0表示0值。
transform(dat, AB = ifelse(sign(RNA) == -1 & sign(ATAC) == -1, 'Down',
ifelse(sign(RNA) == 1 & sign(ATAC) == 1, 'Up', NA)))https://stackoverflow.com/questions/65560067
复制相似问题