将数据帧保存到列表中的值

时间:2018-06-05 18:53:12

标签: r dataframe

我有一个标题列表,我想迭代并创建/保存数据帧。我已尝试使用listMoreThan1000函数(如下所示),但这对我不起作用。任何建议都将不胜感激。

paste()

我想要的输出是三个空数据框:samples <- list("A","B","C") for (i in samples){ paste(i,sumT,sep="_") <- data.frame(col1=NA,col1=NA) } A_sumTB_sumT

2 个答案:

答案 0 :(得分:0)

这是purrr的答案。

samples <- list("A", "B", "C")

samples %>% 
     purrr::map(~ data.frame()) %>% 
     purrr::set_names(~ paste(samples, "sumT", sep="_"))

答案 1 :(得分:0)

考虑创建一个数据框列表,并避免许多单独的对象充斥全球环境,因为此示例可以扩展到数百个而不仅仅是三个。此外,通过这种方法,您将维护一个容器,该容器能够跨所有数据帧运行批量操作。

通过在字符向量上使用sapply,您可以创建一个命名列表:

samples <- c("A","B","C")   # OR unlist(list("A","B","C"))

df_list <- sapply(samples, function(x) data.frame(col1=NA,col2=NA), simplify=FALSE)

# RUN ANY DATAFRAME OPERATION
head(df_list$A)
tail(df_list$B)
summary(df_list$C)

# BULK OPERATIONS
stacked_df <- do.call(rbind, df_list)
stacked_df <- do.call(cbind, df_list)
merged_df <- Reduce(function(x,y) merge(x,y,by="col1"), df_list)

或者如果您需要重命名列表

# RENAME LIST
df_list <- setNames(df_list, paste0(samples, "_sumT"))

# RUN ANY DATAFRAME OPERATION
head(df_list$A_sumT)
tail(df_list$B_sumT)
summary(df_list$C_sumT)