R 如何循环使用列名来计算统计信息?
假设我有这样的数据R 如何循环使用列名来计算统计信息?,r,loops,variables,names,R,Loops,Variables,Names,假设我有这样的数据 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) 将得到我想要的,但不是如何循环。下面的方法似乎不
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
}
如果您想在
repair==1时为所有列查找mean
,我们可以使用summary\u all
fromdplyr
library(dplyr)
dt %>%
filter(repair == 1) %>%
summarize_all(~mean(., na.rm = TRUE))
# rating repair model
#1 3.5 1 0.5
在base 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
library(data.table)
setDT(df1)[repair == 1, lapply(.SD, mean, na.rm = TRUE)]
# rating repair model
#1: 3.5 1 0.5
rep_name使用data.table
,我们可以
rep_names <- 2:3
colMeans(df[rowSums(df[rep_names] == 1) == length(rep_names), ])
#rating repair model
# 2 1 1
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(df[df["repair"]==1,],2,mean)
# rating repair model
# 3.5 1.0 0.5
谢谢你的回答,但问题是我实际上有100多个列,有各种各样的名称,我想找到当列1==1、列2==1等的平均评分。不仅仅是修复==1。谢谢@akrun!那么,我还需要输入每个列名吗?我有超过150个,所以我希望不必这样做…@Megan如果你注意到.SDcols
中的话,我会把列的索引放在3:ncol(df1)
中。谢谢你的回答,但问题是我实际上有100多个列,有各种各样的名称,我想找到列1==1时的评级列的平均值,列2==1等。不只是修复==1。因此,我需要循环遍历100多个列的名称感谢答案,但问题是我实际上有100多个列,有各种名称,我想找到评级列的平均值,例如,当列1==1,列2==1等,而不仅仅是修复==1。所以我需要循环100+的名字columns@Megan我已经相应地更新了答案,请检查这是否是您所需要的。