[英]Using lapply with as.data.frame
df是表的列表(從html轉換並存儲為列表),我想將其轉換為數據框。
as.data.frame(df[1])
沒問題。 但是,兩者
df_2 <- lapply(df, as.data.frame)
和
df_3 <- lapply(df, function(x) {
as.data.frame(x)
})
無法轉換為數據框:
> class(df[1])
[1] "data.frame"
> class(df_2[1])
[1] "list"
> class(df_3[1])
[1] "list"
使用可復制的示例進行編輯:
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),]
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.