计算数据框/表中每列的行数

时间:2016-12-01 17:45:43

标签: r

这是一个简单的问题,但我不确定我做错了什么。

df1 <- data.frame(
  A = c(NA, 0.57, 0.60, 0.51), 
  B = c(NA, 0, 0.09,0.19), 
  C = c(0., 0.05, 0.07, 0.05), 
  D = c(0.23, 0.26, 0.23, 0.26)
)
View(df1)
#   A       B       C       D  
# 1 NA      NA      0.00    0.23
# 2 0.57    0.00    0.05    0.26
# 3 0.60    0.09    0.07    0.23
# 4 0.51    0.19    0.05    0.26

我需要得到每列的总和,然后除以每列中既不是NA也不是0.00的行数。结果应该是:

#    A       B       C       D
# 1  0.56    0.14    0.06    0.25

我尝试了df2 <- apply(df1, 2, function(x) colSums(df1, na.rm = T) /length(which(x !=0))),但它返回了一个4x4矩阵。我怀疑问题出在length(which(x !=0))。请指教。

2 个答案:

答案 0 :(得分:1)

我们可以做到

round(colSums(df1, na.rm = TRUE)/colSums(df1!=0, na.rm=TRUE), 2)
#   A    B    C    D 
# 0.56 0.14 0.06 0.24 

答案 1 :(得分:0)

使用dplyr:

df1 %>%
  replace(is.na(.), 0) %>%
  summarise_each(funs(round(sum(.)/sum(.!=0),2))) 

#      A    B    C    D
#  1 0.56 0.14 0.06 0.24