微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有将字符串迭代器转换为 R 代码的方法?

如何解决是否有将字符串迭代器转换为 R 代码的方法?

我正在尝试计算数据框中所有列的平均值(平均值)。我已经创建了这个代码片段

#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","nr_pix")){
    next
  }
  avgoverallDataset<-cbind(avgoverallDataset,summarise(group_by(overallDataset,val=mean(val)))
}

当我运行此代码时,我收到此错误/警告:

50: In mean.default(val) : argument is not numeric or logical: returning NA

生成的数据框如下所示:

enter image description here

这样做的原因是 val 变量被视为字符串,但我需要将其视为“代码”,例如

avgoverallDataset<- cbind(avgoverallDataset,avgrows_with_2=mean(rows_with_2)))

应该是有效的。

如何将“字符串”转换为“代码中”的值?

注意:可以使用以下方法删除多个标签列:How to remove duplicated column names in R?

解决方法

尝试使用 across,这样您就不必为循环中的多列计算 mean

cols <- setdiff(overallDatasetLabels,c("label","index","nr_pix"))

avgOverallDataset <- overallDataset %>%
                      group_by(label) %>%
                      summarise(across(all_of(cols),mean,na.rm = TRUE))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。