将csv中的列取平均值,并使用信息创建新行

时间:2018-11-29 03:43:13

标签: r row rstudio add mean

我对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])

我确定我只是缺少一些非常简单的东西。谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您可以提供代表性的样品,它将为我们提供更好的主意。您需要确保所有列都是数字,以便立即计算其均值。一种检查方法是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))

答案 1 :(得分:0)

此代码将为您提供选择总计或均值的选项

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')))