【发布时间】:2020-06-01 14:53:18
【问题描述】:
我正在尝试将自定义函数应用于嵌套数据框
我想应用机器学习算法来预测 NA 值
上网查了一下,好像地图功能在这里最适用
我有一段代码嵌套数据框,然后将数据拆分为测试 (data3) 和训练 (data2) 集 - 测试数据集包含要预测的列的所有空值,而训练包含用于训练 ML 模型的所有非 null 值
dmaExtendedDataNA2 <- dmaExtendedDataNA %>%
group_by(dma) %>%
nest() %>%
mutate(data2 = map(data, ~filter(., !(is.na(mean_night_flow)))),
data3 = map(data, ~filter(., is.na(mean_night_flow))))
这是我打算使用的功能:
my_function (test,train) {
et <- extraTrees(x = train, y = train[, "mean_night_flow"], na.action = "fuse", ntree = 1000, nodesize = 2, mtry = ncol(train) * 0.9 )
test1 <- test
test1[ , "mean_night_flow"] <- 0
pred <- predict(et, newdata = test1[, "mean_night_flow"])
test1[ , "mean_night_flow"] <- pred
return(test1)
我尝试了以下代码,但它不起作用:
dmaExtendedDataNA2 <- dmaExtendedDataNA %>%
group_by(dma) %>%
nest() %>%
mutate(data2 = map(data, ~filter(., !(is.na(mean_night_flow)))),
data3 = map(data, ~filter(., is.na(mean_night_flow))),
data4 = map(data3, data2, ~my_function(.x,.y)))
它给出了以下错误:
Error: Index 1 must have length 1, not 33
这表明它需要一列而不是整个数据框。我怎样才能让它工作?
非常感谢
【问题讨论】:
-
您好 MGJ,如果您至少提供数据样本
dput(dmaExtendedDataNA)或dput(dmaExtendedDataNA[1:20,])会更容易提供帮助。您可以编辑您的问题并粘贴输出。您可以用三个反引号 (```) 将其括起来以获得更好的格式。请参阅How to make a reproducible example 了解更多信息。 -
lapply( data, function )用于将函数应用于嵌套列表。