2016-03-06 47 views
1

這裏是我的數據幀:由類拆分缺失值摘要統計

x1 <- as.numeric(c(1.5, 3.2, 5.1, 6.6, NA)) 
x2 <- as.numeric(c(3.4, 5.6, NA, NA, 0.9)) 
x3 <- as.character(c("abc", NA, "cde", NA, NA)) 
x4 <- as.logical(c(1, 1, 0, 1, 0)) 
x5 <- as.integer(c(NA, 2, 4, 7, 9)) 

df <- data.frame(x1, x2, x3, x4, x5, stringsAsFactors = F) 

缺失值摘要統計(百分比):

summary(round(apply(is.na(df), 2, sum)/(nrow(df)), 4)) 

我可以通過類提取列和應用摘要統計4次,以獲得這些獨特的類:

unique(sapply(df, class)) 

我想知道是否有一個不錯的方法使用更少的代碼行將摘要統計信息放在一個表中按類拆分?

我感謝您的幫助。

非常感謝您

拉米

+1

您是否意味着'lapply(分裂(seq_along(DF),sapply(DF,類)),函數(x)的總結(圓(總和(is.na(DF [X])/ nrow(DF ),4))))' – akrun

+0

是的,謝謝。但是你的代碼中有一個輸入錯誤;-)'lapply(split(seq_along(df),sapply(df,class)),function(x)summary(round(apply(is.na(df [x]),2, sum)/(nrow(df)),4)))' –

+0

如果這是你想要的輸出,我們可以使用'colMeans'(發佈爲答案) – akrun

回答

1

我們由每列的「類」 split列的順序獲得list,子集的數據集,轉換爲邏輯矩陣(is.na(df[x])),得到列意指(colMeans),round(如有必要)並執行summary

lapply(split(seq_along(df), sapply(df, class)), 
    function(x) summary(round(colMeans(is.na(df[x])),4)))