首页 > 解决方案 > 将不同长度的数据框绑定到单独列中的 Excel 文件

问题描述

数据框的行数不同。数据集是不均匀的那么如何在单张的单独列中水平添加数据框?

下面是我用来为示例数据编写单独数据框的代码

 files <- list.files(pattern= '*.shp')
 
    a<- read_sf("fire_archive_M6_139248.shp")
    b<- read_sf("fire_nrt_M6_139248.shp")
     aa = as.data.frame(a$ACQ_DATE)
    bb = as.data.frame(b$ACQ_DATE)
    cc = as.data.frame(c$ACQ_DATE)
     library("writexl")
    setwd("D:/fire_work_cov/test3/csv")
    write_xlsx(aa,"2020a.xlsx")
    write_xlsx(bb,"2020b.xlsx")
    write_xlsx(cc,"2019.xlsx")

下面是 aa 和 bb 的头部(每个数据的全头部长度不同)

> head(aa)
  a$ACQ_DATE
1 2020-03-02
2 2020-03-02
3 2020-03-02
4 2020-03-02
5 2020-03-02
6 2020-03-03
> bb = as.data.frame(b$ACQ_DATE)
> head(bb)
  b$ACQ_DATE
1 2020-04-01
2 2020-04-01
3 2020-04-01
4 2020-04-01
5 2020-04-01
6 2020-04-01
> head(cc)
  c$ACQ_DATE
1 2019-03-01
2 2019-03-01
3 2019-03-01
4 2019-03-01
5 2019-03-02
6 2019-03-02

标签: rdataframecbind

解决方案


您可以使用rowr::cbind.fill

### Creating a sample dataset ###
df1 <- data.frame(col = c(1, 2, 3))
df2 <- data.frame(col = c(5, 6))
df3 <- data.frame(col = c(4, 4, 9, 10))
df <- list(df1, df2, df3)

### Loading required library ###
library(rowr) ## Not available for R 4.0.2

### binding the columns for the list of dataframes ###
#### using do.call to apply cbind.fill on a list of dataframes
df.e <- do.call(cbind.fill, c(df, fill=NA))

### writing to csv or excel file ###
#### setting NA-string to "" to have empty cells
#### setting writing row.names to false
write.csv(df.e, "D:\\test.csv", na = "", row.names = FALSE)

或者正如@akrun建议的那样,base我们可以这样做:

mx <- max(sapply(df, nrow)) 

do.call(cbind, lapply(df, function(x) {rbind(x, x[seq_len(mx) > nrow(x),, drop = FALSE])}))


推荐阅读