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