R 如何将自定义函数应用于嵌套数据帧?
我正在尝试将自定义函数应用于嵌套的数据帧 我想应用机器学习算法来预测NA值 在做了一点在线阅读之后,似乎地图功能在这里最适用 我有一段代码嵌套了数据帧,然后将数据拆分为测试(data3)和训练(data2)集——测试数据集包含要预测的列的所有空值,训练集包含要用于训练ML模型的所有非空值R 如何将自定义函数应用于嵌套数据帧?,r,dplyr,purrr,broom,R,Dplyr,Purrr,Broom,我正在尝试将自定义函数应用于嵌套的数据帧 我想应用机器学习算法来预测NA值 在做了一点在线阅读之后,似乎地图功能在这里最适用 我有一段代码嵌套了数据帧,然后将数据拆分为测试(data3)和训练(data2)集——测试数据集包含要预测的列的所有空值,训练集包含要用于训练ML模型的所有非空值 dmaExtendedDataNA2 <- dmaExtendedDataNA %>% group_by(dma) %>%
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))))
这表明它需要一个列,而不是一个完整的数据帧。我怎样才能让它工作
非常感谢没有对您的数据进行测试,我认为您使用了错误的
map
功能purrr::map
处理一个参数(一个列表、一个向量等)并返回一个列表。您正在向它传递两个值(data3
和data2
),因此我们需要使用:
dmaExtendedDataNA2%
分组依据(dma)%>%
嵌套()%>%
mutate(data2=map(data,~filter(,!(is.na(mean\u night\u flow))),
数据3=map(数据,~filter(,is.na(平均夜间流量)),
data4=map2(data3,data2,~my_函数(.x,.y)))
如果您发现自己需要两个以上,则需要pmap
。您可以对1个或2个参数使用pmap
,实际上是相同的。从map
迁移到pmap
时,两个最大的区别是:
- 您的参数需要包含在列表中,因此
变成map2(数据3,数据12,…)
pmap(列表(数据3、数据12),…)
- 您使用双点编号位置引用它们,
,.1
,.2
,等等,所以.3
变成~my_函数(.x,.y)
~my_函数(…1,…2)
一个可以稍微简化整体流程的替代方案
myu功能(测试,train=NULL,fld=“平均夜间流量”){
如果(为空(列车)){
训练你好,MGJ,如果您至少提供一个数据样本,其中包含dput(dmaExtendedDataNA)
或dput(dmaExtendedDataNA[1:20,])
。您可以编辑您的问题并粘贴输出。您可以用三个反勾(`````)环绕它以获得更好的格式。有关更多信息,请参阅。lapply(数据,函数)
用于将函数应用于嵌套列表。
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