首页 > 解决方案 > 将数据框作为参数传递给函数

问题描述

我正在编写一个函数来处理来自一个巨大的数据帧(逐行)的数据,该数据帧总是具有相同的列名。因此,我想将数据框本身作为函数传递,以从各个行中读出我需要的信息。但是,当我尝试将其用作论据时,由于某种原因,我无法从中读取信息。

数据框:

DF <- data.frame("Name" = c("A","B"), "SN" = 1:2, "Age" = c("21,34,456,567,23,123,34", "15,345,567,3,23,45,67,76,34,34,55,67,78,3"))

我的代码:

List <- do.call(list, Map(function(DT) {
  DT <- as.data.frame(DT)
  aa <- as.numeric(strsplit(DT$Age, ","))
  mean.aa <- mean(aa)
},
DF))

尝试这个我得到一个包含列名的列表,但所有值都是 NULL。

预期输出:我的预期输出是一个长度等于数据框中行数的列表。在每个列表索引下应该有另一个列表,其中包含相应行的年龄(稍后还有来自数据表同一行的其他内容)。

DF <- apply(data.frame("Name" = c("A","B"), "SN" = 1:2, "Age" = c("21,34,456,567,23,123,34", "15,345,567,3,23,45,67,76,34,34,55,67,78,3"), "mean.aa" = c(179.7143, 100.8571)), 1, as.list)

我究竟做错了什么?

标签: rfunctiondataframearguments

解决方案


这是一种方法:

DF <- data.frame("Name" = c("A","B"), "SN" = 1:2, "Age" = c("21,34,456,567,23,123,34", "15,345,567,3,23,45,67,76,34,34,55,67,78,3"))

apply(DF, 1, function(row){
  aa <- as.numeric(strsplit(row["Age"], ",")[[1]])
  row["mean.aa"] <- mean(aa)
  as.list(row)
})

推荐阅读