【问题标题】:Is there a method of converting a string iterator to R code?有没有将字符串迭代器转换为 R 代码的方法?
【发布时间】: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?删除多个标签列

【问题讨论】:

标签: r loops casting


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多