【发布时间】:2023-03-31 14:45:02
【问题描述】:
我正在尝试计算数据框中所有列的平均值(平均值)。我已经创建了这个代码 sn-p
#Average overallDataset by label
overallDatasetLabels <- c("label","index","nr_pix","rows_with_2","cols_with_2","rows_with_3p","cols_with_3p","height","width","left2tile","right2tile","verticalness","top2tile","bottom2tile","horizontalness","nodiagnols")
library(dplyr)
avgOverallDataset <- summarise(group_by(overallDataset,label),nr_pix_avg=mean(nr_pix))
for (val in overallDatasetLabels){
if (val %in% c("label","index","nr_pix")){
next
}
avgOverallDataset<-cbind(avgOverallDataset,summarise(group_by(overallDataset,label),val=mean(val)))
}
当我运行此代码时,我收到此错误/警告:
50: In mean.default(val) : argument is not numeric or logical: returning NA
生成的数据框如下所示:
原因是 val 变量被视为字符串,但我需要将其视为“代码”,例如
avgOverallDataset<- cbind(avgOverallDataset,summarise(group_by(overallDataset,label),avgrows_with_2=mean(rows_with_2)))
应该是有效的。
如何将“字符串”翻译成“代码中”的值?
注意:可以使用How to remove duplicated column names in R?删除多个标签列
【问题讨论】:
-
我想你正在寻找
mean(!!sym(val))。见adv-r.hadley.nz/metaprogramming.html