簡體   English   中英

將lapply與as.data.frame一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM