簡體   English   中英

數據透視表Excel或R

[英]Pivot table excel or R

我的數據在excel上看起來像這樣:

Genename ID1 ID2 ID3
Gene1   R   H   R
Gene1   R   H   R
Gene1   H   R   H
Gene2   H   R   H
Gene2   R   R   H
Gene2   H   R   R
Gene2   R   R   R

我想創建一個列,其中每個基因至少有一個H的個體總數。 因此,它應該看起來像這樣;

Genename Het
Gene1 3
Gene2 2

我有數百個基因,因此我需要一種自動化的方法來獲得這些計數。

嘗試這個

library(data.table)
data <- data.table(data)
res <- data[,list("Genename"=Genename,"Het"=rowSums(data=="H")>0)]
res <- res[,list("Het"=sum(Het)),by=Genename]

> res
#   Genename Het
#1:    Gene1   3
#2:    Gene2   3

我們可以按“基因名稱”分組,獲取每列中“ H”的any值的邏輯索引,獲取summarisesum ,然后使用rowSums獲得預期的輸出。

library(dplyr)
df1 %>% 
   group_by(Genename) %>% 
   summarise_each(funs(sum(any(.=='H')))) %>% 
   transmute(Genename= Genename, Het = rowSums(.[-1L]))
   Genename   Het
#    (chr) (dbl)
#1    Gene1     3
#2    Gene2     2

或者,正如@aosmith提到的distinct轉換“寬”到“長”格式后,將是一種選擇gather

library(tidyr)
gather(df1, Var1, Var2, -Genename) %>% 
            group_by(Genename, Var1) %>%
            distinct(Var2) %>%
            group_by(Genename) %>%
            summarise(Het= sum(Var2=='H'))

更新資料

如果我們需要不帶“ H”且每個“基因名稱”至少有一個“ R”的ID數量

df1 %>% 
     group_by(Genename) %>%
     summarise_each(funs(all(.!='H') & any(.=='R'))) %>% 
     transmute(Genename=Genename, Het= rowSums(.[-1L]))
#   Genename   Het
#     (chr) (dbl)
#1    Gene1     0
#2    Gene2     1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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