R 将数据帧列表转换为数据帧
我通过查询SQL数据库制作了一个数据帧列表。dputlist_df[1:5]给出 资料 我想将只包含1行和5列的list_df数据帧绑定到一个新的dataframe,new_df,这样new_df[I,]==list[I] 对于具有0行或多于1行的对象,NA就可以了。我们可以在没有data.frame的位置创建一个data.frame,然后绑定它R 将数据帧列表转换为数据帧,r,list,dataframe,dplyr,lapply,R,List,Dataframe,Dplyr,Lapply,我通过查询SQL数据库制作了一个数据帧列表。dputlist_df[1:5]给出 资料 我想将只包含1行和5列的list_df数据帧绑定到一个新的dataframe,new_df,这样new_df[I,]==list[I] 对于具有0行或多于1行的对象,NA就可以了。我们可以在没有data.frame的位置创建一个data.frame,然后绑定它 library(purrr) map_dfr(list_df, ~ if(!is.data.frame(.x) | nrow(data.frame(.
library(purrr)
map_dfr(list_df, ~ if(!is.data.frame(.x) | nrow(data.frame(.x)) != 1) data.frame(associated_gene = NA) else .x)
#associated_gene refsnp_id allele chrom_start chrom_end
#1 <NA> <NA> <NA> NA NA
#2 <NA> rs778387354 GTGCCCTGGACGTGGCCTCGAACCGCGTGCCCTGG/GTGCCCTGG 42692955 42692989
#3 rs771507737 AT/- 42693404 42693405
#4 <NA> <NA> <NA> NA NA
#5 A4GALT rs387906280 GGGG/GGGGG 42692923 42692926
#6 <NA> rs1296945362 GGGTGGGGTGGGG/GGGTGGGGTGGGGTGGGG 42693742 42693754
#7 <NA> rs775626055 GGGGGG/GGGG/GGGGGGG 42693751 42693756
我们可以创建一个data.frame,然后绑定它
library(purrr)
map_dfr(list_df, ~ if(!is.data.frame(.x) | nrow(data.frame(.x)) != 1) data.frame(associated_gene = NA) else .x)
#associated_gene refsnp_id allele chrom_start chrom_end
#1 <NA> <NA> <NA> NA NA
#2 <NA> rs778387354 GTGCCCTGGACGTGGCCTCGAACCGCGTGCCCTGG/GTGCCCTGG 42692955 42692989
#3 rs771507737 AT/- 42693404 42693405
#4 <NA> <NA> <NA> NA NA
#5 A4GALT rs387906280 GGGG/GGGGG 42692923 42692926
#6 <NA> rs1296945362 GGGTGGGGTGGGG/GGGTGGGGTGGGGTGGGG 42693742 42693754
#7 <NA> rs775626055 GGGGGG/GGGG/GGGGGGG 42693751 42693756
plyr::rbind.fill也可以:
library(plyr)
list_df <- lapply(list_df, as.data.frame)
df <- rbind.fill(list_df)
df <- df[, -1] # remove column X[[i]] containing "NOT FOUND"
plyr::rbind.fill也可以:
library(plyr)
list_df <- lapply(list_df, as.data.frame)
df <- rbind.fill(list_df)
df <- df[, -1] # remove column X[[i]] containing "NOT FOUND"
如果您只想拥有具有指定维度的列表,我们可以使用过滤器
如果您只想拥有具有指定维度的列表,我们可以使用过滤器
@user171558如果您检查输出,最后两行来自list_df[[6]]@user171558是否需要map_dfrlist_df,~If!is.data.frame.x data.frameassociated_gene=NA else ifnrow.x==2 rbind.x,NA else.xSo我正在阅读文档并修改您的地图,但它不起作用。我想要这样的东西:列出\u df%>%map\u dfr~如果!is.data.frame.x&nrow.x!=1 data.frameassociated_gene=NA else。x@user171558如果您的数据集不是data.frame,那么就没有nrow,也许您需要map_dfrlist_df,~If!is.data.frame.x&length.x==1 data.frameassociated\u gene=NA else.xlist\u df%>%map\u dfr~if!is.data.frame.x | nrowdata.frame.x!=1 data.frameassociated_gene=NA else.x我现在了解了它的工作原理。我假设它给出了list_df[[6]],但是他们的for循环确实列出了list_df[6]@user171558如果你检查输出,最后两行是list_df[[6]@user171558你需要map_dfrlist_df,~If!is.data.frame.x data.frameassociated_gene=NA else ifnrow.x==2 rbind.x,NA else.xSo我正在阅读文档并修改您的地图,但它不起作用。我想要这样的东西:列出\u df%>%map\u dfr~如果!is.data.frame.x&nrow.x!=1 data.frameassociated_gene=NA else。x@user171558如果您的数据集不是data.frame,那么就没有nrow,也许您需要map_dfrlist_df,~If!is.data.frame.x&length.x==1 data.frameassociated\u gene=NA else.xlist\u df%>%map\u dfr~if!is.data.frame.x | nrowdata.frame.x!=1 data.frameassociated_gene=NA else.x我现在了解了它的工作原理。我假设它给出了list_df[[6]],但他们的for循环确实给出了list_df[6]
library(plyr)
list_df <- lapply(list_df, as.data.frame)
df <- rbind.fill(list_df)
df <- df[, -1] # remove column X[[i]] containing "NOT FOUND"
do.call(rbind, Filter(function(x) is.data.frame(x) && nrow(x) == 1 && ncol(x) == 5, list_df))
# associated_gene refsnp_id allele chrom_start chrom_end
#2 <NA> rs778387354 GTGCCCTGGACGTGGCCTCGAACCGCGTGCCCTGG/GTGCCCTGG 42692955 42692989
#21 rs771507737 AT/- 42693404 42693405
#1 A4GALT rs387906280 GGGG/GGGGG 42692923 42692926
dplyr::bind_rows(lapply(list_df, function(x)
if (is.data.frame(x) && nrow(x) == 1 && ncol(x) == 5) x else
data.frame(associated_gene = NA)))
# associated_gene refsnp_id allele chrom_start chrom_end
#1 <NA> <NA> <NA> NA NA
#2 <NA> rs778387354 GTGCCCTGGACGTGGCCTCGAACCGCGTGCCCTGG/GTGCCCTGG 42692955 42692989
#3 rs771507737 AT/- 42693404 42693405
#4 <NA> <NA> <NA> NA NA
#5 A4GALT rs387906280 GGGG/GGGGG 42692923 42692926
#6 <NA> <NA> <NA> NA NA