在列表中的嵌套列表中用 NA 替换空列
Replace empty columns with NA's in nested lists within lists
我使用两个函数(如下)在列表中生成了 10 个嵌套列表 - 从名为 normalised_scores
的虚拟数据生成。每个嵌套列表包含两个名为 Predicted
和 Actual
的空列(下面的代码)。我想用 NA 替换这些空列。我试图用函数 (Shuffle100
) 来实现这一点,但得到了 error messages (below)
。在网上找了半天,除了使用冗长的代码(下),我找不到有效的方法。如果有人能帮忙,那就谢谢了。
虚拟数据
Family=rep(c("G8", "V4"), each=40)
x <- matrix(rnorm(960), ncol=12)
normalised_scores <- cbind(Family, x)
colnames(my_data)<-c("Family",
"Swimming",
"Not.Swimming",
"Running",
"Not.Running",
"Fighting",
"Not.Fighting",
"Resting",
"Not.Resting",
"Hunting",
"Not.Hunting",
"Grooming",
"Not.Grooming")
我在下面编写了这个函数,使用 rpart
和 caret
包从分类树模型中生成这 10 个嵌套列表。我尝试生成两列(Predicted
和 Actual
)并使用此函数填充 NA's
但没有成功。
library(caret)
library(e1071)
library(rpart)
shuffle100 <-lapply(seq(10), function(n){ #Select the production of 10 dataframes
subset <- normalised_scores[sample(nrow(normalised_scores), 80),] #Shuffle rows
subset_idx <- sample(1:nrow(subset), replace = FALSE)
subset <- subset[subset_idx, ] #training subset
subset1<-subset[-subset_idx, ] #test subset
subset_resampled_idx <- createDataPartition(subset_idx, times = 1, p = 0.7, list = FALSE) #70 % training set
subset_resampled <- subset[subset_resampled_idx, ]
ct_mod<-rpart(Family~., data=subset_resampled, method="class", control=rpart.control(cp=0.005)) #10 ct
ct_pred<-predict(ct_mod, newdata=subset[, 2:13])
ct_dataframe=as.data.frame(ct_pred) #create new data frame
ct_dataframe$Predicted=NA
ct_dataframe$Actual=NA
})
生成两个名为预测和实际的空列
my_list <- lapply(shuffle100, function(df){#Create two new columns Predicted and Actual
if (nrow(df) > 0)
cbind(df, Predicted = c(""), Actual = c(""))
else
cbind(df, Predicted = character(), Actual = c(""))
})
来自函数 Shuffle100
的错误消息和大部分相同(列表 1-10):
[[1]]
[1] NA
[[2]]
[1] NA
[[3]]
[1] NA
有没有更有效的方法?
#Insert NA's
my_list[[1]]$Predicted<-NA
my_list[[1]]$Actual<-NA
my_list[[2]]$Predicted<-NA
my_list[[2]]$Actual<-NA
my_list[[3]]$Predicted<-NA
my_list[[3]]$Actual<-NA
my_list[[4]]$Predicted<-NA
my_list[[4]]$Actual<-NA
my_list[[5]]$Predicted<-NA
my_list[[5]]$Actual<-NA
my_list[[6]]$Predicted<-NA
my_list[[6]]$Actual<-NA
my_list[[7]]$Predicted<-NA
my_list[[7]]$Actual<-NA
my_list[[8]]$Predicted<-NA
my_list[[8]]$Actual<-NA
my_list[[9]]$Predicted<-NA
my_list[[9]]$Actual<-NA
my_list[[10]]$Predicted<-NA
my_list[[10]]$Actual<-NA
使用dplyr的mutate函数,试试
library(dplyr)
lapply(my_list, function(x) mutate(x, Predicted = NA, Actual = NA)
我们可以使用transform
lapply(my_list, transform, Predicted=NA, Actual=NA)
我使用两个函数(如下)在列表中生成了 10 个嵌套列表 - 从名为 normalised_scores
的虚拟数据生成。每个嵌套列表包含两个名为 Predicted
和 Actual
的空列(下面的代码)。我想用 NA 替换这些空列。我试图用函数 (Shuffle100
) 来实现这一点,但得到了 error messages (below)
。在网上找了半天,除了使用冗长的代码(下),我找不到有效的方法。如果有人能帮忙,那就谢谢了。
虚拟数据
Family=rep(c("G8", "V4"), each=40)
x <- matrix(rnorm(960), ncol=12)
normalised_scores <- cbind(Family, x)
colnames(my_data)<-c("Family",
"Swimming",
"Not.Swimming",
"Running",
"Not.Running",
"Fighting",
"Not.Fighting",
"Resting",
"Not.Resting",
"Hunting",
"Not.Hunting",
"Grooming",
"Not.Grooming")
我在下面编写了这个函数,使用 rpart
和 caret
包从分类树模型中生成这 10 个嵌套列表。我尝试生成两列(Predicted
和 Actual
)并使用此函数填充 NA's
但没有成功。
library(caret)
library(e1071)
library(rpart)
shuffle100 <-lapply(seq(10), function(n){ #Select the production of 10 dataframes
subset <- normalised_scores[sample(nrow(normalised_scores), 80),] #Shuffle rows
subset_idx <- sample(1:nrow(subset), replace = FALSE)
subset <- subset[subset_idx, ] #training subset
subset1<-subset[-subset_idx, ] #test subset
subset_resampled_idx <- createDataPartition(subset_idx, times = 1, p = 0.7, list = FALSE) #70 % training set
subset_resampled <- subset[subset_resampled_idx, ]
ct_mod<-rpart(Family~., data=subset_resampled, method="class", control=rpart.control(cp=0.005)) #10 ct
ct_pred<-predict(ct_mod, newdata=subset[, 2:13])
ct_dataframe=as.data.frame(ct_pred) #create new data frame
ct_dataframe$Predicted=NA
ct_dataframe$Actual=NA
})
生成两个名为预测和实际的空列
my_list <- lapply(shuffle100, function(df){#Create two new columns Predicted and Actual
if (nrow(df) > 0)
cbind(df, Predicted = c(""), Actual = c(""))
else
cbind(df, Predicted = character(), Actual = c(""))
})
来自函数 Shuffle100
的错误消息和大部分相同(列表 1-10):
[[1]]
[1] NA
[[2]]
[1] NA
[[3]]
[1] NA
有没有更有效的方法?
#Insert NA's
my_list[[1]]$Predicted<-NA
my_list[[1]]$Actual<-NA
my_list[[2]]$Predicted<-NA
my_list[[2]]$Actual<-NA
my_list[[3]]$Predicted<-NA
my_list[[3]]$Actual<-NA
my_list[[4]]$Predicted<-NA
my_list[[4]]$Actual<-NA
my_list[[5]]$Predicted<-NA
my_list[[5]]$Actual<-NA
my_list[[6]]$Predicted<-NA
my_list[[6]]$Actual<-NA
my_list[[7]]$Predicted<-NA
my_list[[7]]$Actual<-NA
my_list[[8]]$Predicted<-NA
my_list[[8]]$Actual<-NA
my_list[[9]]$Predicted<-NA
my_list[[9]]$Actual<-NA
my_list[[10]]$Predicted<-NA
my_list[[10]]$Actual<-NA
使用dplyr的mutate函数,试试
library(dplyr)
lapply(my_list, function(x) mutate(x, Predicted = NA, Actual = NA)
我们可以使用transform
lapply(my_list, transform, Predicted=NA, Actual=NA)