正在尝试对列表应用函数plyr::ldply以转换为不同行数的data.frame
我试图应用正在尝试对列表应用函数plyr::ldply以转换为不同行数的data.frame,r,R,我试图应用plyr包中的ldply函数将列表转换为数据帧,但一直遇到错误。我应用以下行: final <- plyr::ldply(data, data.frame) 列表是否必须具有相同的行数?我想既然我试图绑定行,那么每个列表中只有列需要相等 数据: 编辑: 好吧,我意识到问题可能在于列表中的两个元素具有不同的列名。运行: 我想这解决了我的问题: info <- do.call("rbind", lapply(data, "[[", 1)) filing <- do.ca
plyr
包中的ldply
函数将列表转换为数据帧,但一直遇到错误。我应用以下行:
final <- plyr::ldply(data, data.frame)
列表是否必须具有相同的行数?我想既然我试图绑定行,那么每个列表中只有列需要相等
数据:
编辑:
好吧,我意识到问题可能在于列表中的两个元素具有不同的列名。运行:
我想这解决了我的问题:
info <- do.call("rbind", lapply(data, "[[", 1))
filing <- do.call("rbind", lapply(data, "[[", 2))
info%
左联合(,,info,by=“cik”)
事实上,您可能希望颠倒您的dplyr::left_join
中的顺序,因为信息中包含的clk多于归档。后者在原始列表中维护两个空数据帧
library(dplyr)
library(tibble)
info <- do.call("rbind", lapply(data, "[[", 1))
filing <- do.call("rbind", lapply(data, "[[", 2))
final_df_op <- info %>%
left_join(filing %>%
tibble::rownames_to_column(., "cik") %>%
mutate(cik = gsub("\\..*", "", cik)), by = "cik")
str(final_df_op)
# 'data.frame': 51 obs. of 30 variables:
# $ name : chr "AAR CORP" "AAR CORP" "AAR CORP" "AAR CORP" ...
# $ cik : chr "0000001750" "0000001750" "0000001750" "0000001750" ...
# $ fiscal_year_end : chr "0531" "0531" "0531" "0531" ...
# ...
该列表称为
data
。我只是尝试将列表再次导入到我的环境中,没有任何问题。它应该只是6个元素的列表。
info <- do.call("rbind", lapply(data, "[[", 1))
filing <- do.call("rbind", lapply(data, "[[", 2))
x <- filing %>%
rownames_to_column(., "cik") %>%
mutate(cik = gsub("\\..*", "", cik)) %>%
left_join(., info, by = "cik")
library(dplyr)
library(tibble)
info <- do.call("rbind", lapply(data, "[[", 1))
filing <- do.call("rbind", lapply(data, "[[", 2))
final_df_op <- info %>%
left_join(filing %>%
tibble::rownames_to_column(., "cik") %>%
mutate(cik = gsub("\\..*", "", cik)), by = "cik")
str(final_df_op)
# 'data.frame': 51 obs. of 30 variables:
# $ name : chr "AAR CORP" "AAR CORP" "AAR CORP" "AAR CORP" ...
# $ cik : chr "0000001750" "0000001750" "0000001750" "0000001750" ...
# $ fiscal_year_end : chr "0531" "0531" "0531" "0531" ...
# ...
info <- do.call("rbind", mapply(function(d, n) transform(d[[2]], cik=n),
data, names(data), SIMPLIFY=FALSE, USE.NAMES=FALSE))
# TRY CATCH TO ACCOUNT FOR ZERO-ROW DF ERRORS
filing <- do.call("rbind", mapply(function(d, n)
tryCatch(transform(d[[2]], cik=n),
error = function(e) NA),
data, names(data), SIMPLIFY=FALSE, USE.NAMES=FALSE))
# LEFT JOIN MERGE
final_df <- merge(info, filing, by="cik", all.x=TRUE)
str(final_df)
# 'data.frame': 51 obs. of 30 variables:
# $ cik : chr "0000001750" "0000001750" "0000001750" "0000001750" ...
# $ name : chr "AAR CORP" "AAR CORP" "AAR CORP" "AAR CORP" ...
# $ fiscal_year_end : chr "0531" "0531" "0531" "0531" ...
# ...