首页 > 解决方案 > 如何使用主 data.frame 将 anti_join 应用于 data.frames 列表

问题描述

我有一个按类别随机分层的 data.frames 列表,以获得 70% 的原始数据集。我想反加入 data.frames 列表以获得由剩余 30% 数据组成的单独 data.frames 列表。

require(splitstackshape)

n <- 10
heads <- "bc_title4"

train_split <- function(x) {
  listofdfs <- list()
  for(i in 1:n){
    df <- stratified(x, 1, 0.7)
    listofdfs[[i]] <- df
  }
  return(listofdfs)
}

train_list <- train_split(survey_points) #returns data.frame list to environment

test_split <- function(x) {
  listofdfs2 <- list()
  for(i in train_list){
    df <- x[!x$id %in% data.frame(train_list[i])$id,]
    listofdfs2[[i]] <- df
  }
  return(listofdfs2)
}

test_list <- test_split(survey_points)

但是,当我收到以下错误时,我不知道如何为 antijoin 编写函数:

Error in train_list[i] : invalid subscript type 'list' 
6.
data.frame(train_list[i]) 
5.
x$id %in% data.frame(train_list[i])$id 
4.
x$id %in% data.frame(train_list[i])$id 
3.
`[.data.frame`(x, !x$id %in% data.frame(train_list[i])$id, ) 
2.
x[!x$id %in% data.frame(train_list[i])$id, ] 
1.
test_split(survey_points) 

尝试使用函数 anti_join 时出现同样的错误:

test_split <- function(x) {
  listofdfs2 <- list()
  for(i in train_list){
    anti_join(x, data.frame(train_list[i]), by = "id")
    listofdfs2[[i]]
  }
  return(listofdfs2)
}


test <- test_split(survey_points)
 Error in train_list[i] : invalid subscript type 'list' 
9.
data.frame(train_list[i]) 
8.
tbl_vars(y) 
7.
check_valid_names(tbl_vars(y), warn_only = TRUE) 
6.
anti_join.tbl_df(tbl_df(x), y, by = by, copy = copy, ...) 
5.
anti_join(tbl_df(x), y, by = by, copy = copy, ...) 
4.
as.data.frame(anti_join(tbl_df(x), y, by = by, copy = copy, ...)) 
3.
anti_join.data.frame(x, data.frame(train_list[i]), by = "id") 
2.
anti_join(x, data.frame(train_list[i]), by = "id") 
1.
test_split(survey_points) 

标签: r

解决方案


推荐阅读