[英]Conditional assignment of variable to dataframe in R
我的數據框
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.
這個
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 行都是負數,但我仍然看到“UP”。 這應該是“下降”,但因為兩個負面都會給出一個積極的產品,所以它會“上升”我認為
如何解決問題? 如果兩個列都是負數,那么第 4 列應該是“DOWN”,如果 RNA 和 ATAC 列都是正數,那么我會在第 4 列看到“UP”。
如果一個是正面的,另一個是負面的怎么辦? 下面的答案將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)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.