我有一个数据框显示了一个国家从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
答案 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
函数家族。