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

Posted

技术标签:

【中文标题】试图弄清楚如何使用列表返回数据框中每一列的平均值【英文标题】:Trying to figure out how to return the mean value of each column in a data frame using a list 【发布时间】:2019-09-10 16:38:54 【问题描述】:

我有一个数据框,它显示了一个国家从 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

【问题讨论】:

正如@Peter_Evan 所说,尝试 get_col_mean("life_exp", life_exp) 【参考方案1】:

我相信您误用了 $ 运算符。这用于按名称抓取单个列。

#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 系列函数可能是您正在寻找的。​​p>

【讨论】:

感谢您的评论!这很有帮助。我使用了 lapply,它奏效了。

以上是关于试图弄清楚如何使用列表返回数据框中每一列的平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何计算熊猫数据框中每一列的唯一性?

获取pandas数据框中每一列的前k个元素的索引的快速方法

利用pandas和numpy计算表中每一列的均值

如何找出 Redshift 表中每一列的大小?

如何获得每列的最大值?

将函数应用于数据框中的每一列,观察每一列现有的数据类型