试图弄清楚如何使用列表返回数据框中每一列的平均值

时间:2019-04-20 22:22:20

标签: r list function dataframe filtering

我有一个数据框显示了一个国家从1800年到2018年的平均预期寿命。这些列的标签如下:XYear。例如:X2000。我做了一个函数,该函数返回选定列的平均值。这是我正在努力的部分:作业要求我使用上述功能创建一个列表,该列表具有数据框中每一列的平均值。

我尝试制作一个列表元素,该元素将选择除第一个元素外的所有行和列(使用[-1,-1]选择它们)。

life_exp <- read.csv("data/life_expectancy_years.csv", stringsAsFactors = FALSE)

编写一个函数get_col_mean(),该函数接受列名和数据框并返回该列的均值。确保正确处理NA值

get_col_mean <- function(col_name, data_frame_name) {
return(mean(data_frame_name[, col_name], na.rm = TRUE))
}

创建一个列表col_means,该列表具有数据框中每一列的平均值(Country列除外)。您应该使用上面的功能。

我尝试了这个: column_means = get_col_mean(life_exp $ life_exp [,-1],life_exp)

但是我收到此错误消息:

  

mean.default(data_frame_name [,col_name],na.rm = TRUE):     参数不是数字或逻辑:返回NA

1 个答案:

答案 0 :(得分:0)

我相信您在滥用$运算符。用于按名称抓取单个列。

#data frame
z <- data.frame(l = c(1,2,3,4), y = c(4,3,2,3), c =c(1,'',3,4)))

z$l
[1] 1 2 3 4

z$z
NULL

#numeric (note that I am providing the column name as a string
get_col_mean("l", z)

#outout
[1] 3

#this is the same as putting NULL in
get_col_mean(z$z, z)

#your presumed error
[1] NA
Warning message:
  In mean.default(data_frame_name[, col_name], na.rm = TRUE) :
  argument is not numeric or logical: returning NA

如果您希望将其应用于每一列,则可能需要for循环或apply函数家族。