【问题标题】:Take the mean of a columns in csv and create a new row with the information取csv中列的平均值并使用信息创建一个新行
【发布时间】:2019-05-01 01:47:06
【问题描述】:

我对 R 很陌生,但喜欢所有可用的帮助。我遇到的问题是,由于制作了很多视频和帮助网站,所以更新了很多,代码不再有效。

我有一个包含免疫百分比的 csv,我想找到每列数据的平均值。如果有办法将此值添加为理想但不必要的数据的最后一行。我尝试了几种不同类型的均值函数,但仍然收到错误消息。

我尝试了以下代码。我的文件名为 Measles1,列是 Y,后面是年份。我把特定于行的错误代码放在了上面,但想展示我尝试过的内容以供参考。任何帮助将不胜感激。

> colMeans(Measles1$Y2017)

> colMeans(Measles1)

> mean(Measles1$Y2017)

> mean(Measles1$Y2017, na.rm = TRUE)

> colMeans(Measles1$Y2017, na.rm = TRUE)

> Means <- colMeans(as.numeric(as.character(Measles1)))

> results.mean <- mean(Measles1)

> results.mean <- mean(Measles1,na.rm = TRUE)

> mean(Measles1[2:39])

我确信我只是错过了一些非常简单的东西。感谢您的帮助。

【问题讨论】:

  • 试试new_Measles &lt;- rbind(Measles1, colMeans(Measles1))

标签: r row rstudio add mean


【解决方案1】:

如果您能提供一个有代表性的样本,我们会更好地了解。您需要确保所有列都是数字的,以便一次计算它们的平均值。一种检查方法是str(your_data_frame)

使用内置的mtcars 数据集:

# na.rm argument is optional depending on your data
mtcars[nrow(mtcars) + 1, ] <- colMeans(mtcars, na.rm = T)

@Ronak Shah 的推荐也很有效:

mtcars <- rbind(mtcars, colMeans(mtcars, na.rm = T))

【讨论】:

  • 你是正确的,数据没有被存储为数字。我解决了这个问题并尝试使用代码并意识到第一列是国家名称而不是行的标题。一旦我修复了所有这些,代码就可以完美运行。
【解决方案2】:

此代码将为您提供按列值查找总计或平均值的选项

d1 <- data_frame(
  name = c("jim", "john", "jim", "john"),
  `2012` = c(57, 58, 47, 57),
  `2013` = c(14, 3, 3, 90))

library(tidyverse)

d1 <-bind_rows(d1,
          d1 %>% 
            group_by(name) %>% 
            summarise_all(funs(mean)) %>%
            mutate(name = paste0(name, '_total')))

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2021-06-28
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多