簡體   English   中英

如何循環列名來計算統計信息?

[英]How do I loop through column names to compute statistics?

說我的數據看起來像這樣

rating  repair  model
5        0       1
4        0       0 
2        1       1
5        1       0 

我想能夠找到每次修復評級的平均值== 1。 但是我實際上有200個列名,我想這樣做,因為它不遵循特定的模式。 我不知道如何遍歷這些列。 我知道

 mean(dt[dt$repair==1,]$rating, na.rm=T)

會得到我想要的但不是如何循環。 以下似乎不起作用。 謝謝!

for(name in rep_names){
    dt[paste0('dt$',name)==1,]$rating
}

如果你想找到mean所有列在repair == 1我們可以使用summarize_alldplyr

library(dplyr)

dt %>%
 filter(repair == 1) %>%
 summarize_all(~mean(., na.rm = TRUE))

# rating repair model
#1    3.5      1   0.5

在基數R中,我們也可以使用colMeans

colMeans(dt[dt$repair == 1,], na.rm = TRUE)

#rating repair  model 
#   3.5    1.0    0.5 

編輯

如評論中所述,如果我們需要過濾1個列,然后取平均值,我們可以先使用列索引或列名稱選擇這些列。 例如,假設我們想在這里過濾第2列到第3列,然后我們就可以了

rep_names <- 2:3
colMeans(df[rowSums(df[rep_names] == 1) == length(rep_names), ])

#rating repair  model 
# 2      1      1 

rep_names可以包含我們要檢查1的列名列號。

有了data.table ,我們就可以做到

library(data.table)
setDT(df1)[repair == 1, lapply(.SD, mean, na.rm = TRUE)]
#   rating repair model
#1:    3.5      1   0.5

更新

根據評論

setDT(df1)[column1 == 1 & column2 == 1, lapply(.SD, mean), .SDcols = 3:ncol(df1)]

apply解決方案。 可能會很慢:

apply(df[df["repair"]==1,],2,mean)
# rating repair  model 
#   3.5    1.0    0.5 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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