使用数据框 (R) 在应用函数中获取列名

问题描述

这看起来很简单。但是我找不到一个简单快捷的解决方案。 我只想在数据框上运行应用函数 - 结果应按列显示一条包含列名的消息。我的其余命令工作正常...

apply(airquality,2,function(x) message(names(x)," has ",sum(!is.na(x))," cases.\n","NA values: ",length(x) - sum(!is.na(x))))

不显示每列的名称。我怀疑这是因为它按列工作..我需要想出我自己的函数吗? 谢谢, 娜丁

解决方法

您可以遍历 names

lapply(names(airquality),function(x)
  message(x," has ",sum(!is.na(airquality[[x]]))," cases.\n","NA values: ",length(airquality[[x]]) - sum(!is.na(airquality[[x]])))
)

或者在 for 循环中更好:

for(i in names(airquality)) {
  message(i,sum(!is.na(airquality[[i]])),length(airquality[[i]]) - sum(!is.na(airquality[[i]])))
}
#Ozone has 116 cases.
#NA values: 37
#Solar.R has 146 cases.
#NA values: 7
#Wind has 153 cases.
#NA values: 0
#Temp has 153 cases.
#NA values: 0
#Month has 153 cases.
#NA values: 0
#Day has 153 cases.
#NA values: 0
,

这是我将如何使用 purrr::iwalk()

purrr::iwalk(airquality,~ message(sprintf("%s has %s cases.\nNA values: %s",.y,sum(!is.na(.x)),sum(is.na(.x)))))

输出:

Ozone has 116 cases.
NA values: 37
Solar.R has 146 cases.
NA values: 7
Wind has 153 cases.
NA values: 0
Temp has 153 cases.
NA values: 0
Month has 153 cases.
NA values: 0
Day has 153 cases.
NA values: 0