2016-12-01 14 views
0

これは簡単な質問ですが、私が間違っていたかどうかはわかりません。データフレーム/テーブル内の各列の行数をカウントする

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 

私は結果があるべきでもないNA0.00ある各列の行数で各列と除算の合計を取得する必要があります:私はdf2 <- apply(df1, 2, function(x) colSums(df1, na.rm = T) /length(which(x !=0)))を試みたが、それは返し

# A  B  C  D 
# 1 0.56 0.14 0.06 0.25 

4×4行列。問題がlength(which(x !=0))であると思われます。ご意見をお聞かせください。私たちが行うことができます

+1

'sapply(DF1、関数(x)の合計(X、na.rm = T)/長さ((X = 0))) ' – Haboryme

+0

あなたは思考ループを止めて、Rishを考え始めるべきである –

答えて

1

dplyrで
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 
+0

なぜこれがダウンリストされていますか? –

0

:!

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 
関連する問題