[英]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
值的邏輯索引,獲取summarise
的sum
,然后使用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.