簡體   English   中英

R如何計算跨數據幀多列的值的出現並將特定值的按列計數保存為新行?

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

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