将lappy与as.data.frame一起使用
df是一个从html转换而来的表列表,存储为要转换为数据帧的列表将lappy与as.data.frame一起使用,r,lapply,R,Lapply,df是一个从html转换而来的表列表,存储为要转换为数据帧的列表 as.data.frame(df[1]) 没问题。然而,两者 df_2 <- lapply(df, as.data.frame) 使用可复制的示例进行编辑: a <- tribble( + ~ x, ~ y, + 1, 2 + ) > b <- tribble( + ~ x, ~ y, + 3, 4 + ) > a_list <- as.list(a) > b_list <-
as.data.frame(df[1])
没问题。然而,两者
df_2 <- lapply(df, as.data.frame)
使用可复制的示例进行编辑:
a <- tribble(
+ ~ x, ~ y,
+ 1, 2
+ )
> b <- tribble(
+ ~ x, ~ y,
+ 3, 4
+ )
> a_list <- as.list(a)
> b_list <- as.list(b)
master_list <- list(a_list, b_list)
a_df <- as.data.frame(master_list[1])
> class(a_df)
[1] "data.frame"
master_df <- lapply(master_list, as.data.frame)
> class(master_df[1])
[1] "list"
class(master_df[[1]])
[1] "data.frame"
实际上,需要[[]]来过滤掉容器。。。但是,这仍然不能解决在我的原始示例中执行此操作的全部原因,即调用从每个表中移除空行的函数:
> clear_empty <- master_df[!apply(master_df == "", 1, all), ]
Error in apply(master_df == "", 1, all) :
dim(X) must have a positive length
也许我必须找到另一个函数来执行此操作,尽管我喜欢上面的函数的简单性。您可以使用此解决方案:
a <- tribble(
~ x, ~ y,
1, 2,
1,1,
'','',
1,''
)
b <- tribble(
~ x, ~ y,
3, 4,
'',2,
4,''
)
a_list <- as.list(a)
b_list <- as.list(b)
master_list <- list(a_list, b_list)
nes_list <- lapply(master_list,function(x) {
x <- as.tibble(x)
x[x == ''] <- NA
# removing rows that have all NA
# x[rowSums(is.na(x)) != ncol(x),]
# remove rows that have at least one NA
# x[complete.cases(x),]
})
你能给出一个可重复的例子吗?Lappy也返回一个列表。在没有看到示例的情况下很难判断,但是您可以尝试使用[[而不是[.[]提取元素,而在本例中,[提取元素和容器可能是list@MikeH.“事实上,我已经忘记了这一点。”约翰·科勒曼·奥克补充道,谢谢。
> clear_empty <- master_df[!apply(master_df == "", 1, all), ]
Error in apply(master_df == "", 1, all) :
dim(X) must have a positive length
a <- tribble(
~ x, ~ y,
1, 2,
1,1,
'','',
1,''
)
b <- tribble(
~ x, ~ y,
3, 4,
'',2,
4,''
)
a_list <- as.list(a)
b_list <- as.list(b)
master_list <- list(a_list, b_list)
nes_list <- lapply(master_list,function(x) {
x <- as.tibble(x)
x[x == ''] <- NA
# removing rows that have all NA
# x[rowSums(is.na(x)) != ncol(x),]
# remove rows that have at least one NA
# x[complete.cases(x),]
})