![](/img/trans.png)
[英]R: How to count the number of occurrences of a value across multiple columns?
[英]R How to count occurrences of values across multiple columns of a data frame and save the columnwise counts from a particular value as a new row?
我有一個很大的數據框(大約1,000行和30,000列),看起來像這樣:
chr pos sample1 sample2 sample3 sample 4
1 5050 1 NA 0 0.5
1 6300 1 0 0.5 1
1 7825 1 0 0.5 1
1 8200 0.5 0.5 0 1
在給定的“ chr”和“ pos”處,給定樣本的值可以采用0、0.5、1或NA的形式。 我要執行大量查詢,這些查詢需要根據每個樣本的值匯總對數據框進行子集和排序。
我想獲得每列給定值(例如0.5)的出現次數計數,並將其另存為我的數據框中的新行。 我的最終目標是能夠使用新行的值對數據框的列進行子集和/或排序。 我已經看到過類似的關於計數出現次數的問題,但是我似乎找不到/認識到一種解決方案,可以同時在所有列上執行此操作並將特定值的列計數保存為新行。
您可以將函數應用於data.frame的所有列。 假設您要計算數據每一列中的'A'數。
#a sample data.frame
L3 <- LETTERS[1:3]
(d <- data.frame(cbind(x = 1, y = 1:10), fac = sample(L3, 10, replace = TRUE)))
# the function you are looking for
apply(X=d,2,FUN=function(x) length(which(x=='A')))
與@Jilber非常相似。 假設您的數據在數據幀df
。
lst <- colnames(df[,-(1:2)])
count.na <- sapply(lst,FUN=function(x,df){sum(is.na(df[,x]))},df)
count.00 <- sapply(lst,FUN=function(x,df){sum(df[,x]==0,na.rm=T)},df)
count.05 <- sapply(lst,FUN=function(x,df){sum(df[,x]==0.5,na.rm=T)},df)
count.10 <- sapply(lst,FUN=function(x,df){sum(df[,x]==1.0,na.rm=T)},df)
df <- rbind(df,
c(NA,NA,count.na),
c(NA,NA,count.00),
c(NA,NA,count.05),
c(NA,NA,count.10))
您可能希望用標識您正在計數的內容替換最后一個rbind(...)語句中的NA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.