簡體   English   中英

在 R 中將變量條件賦值給 dataframe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM