r - 将不同长度的数据框绑定到单独列中的 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
解决方案
您可以使用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])}))
推荐阅读
- windows - 在 powershell 中生成 RSA 密钥对
- batch-file - 预定蝙蝠的净使用
- php - PHP 如果值为 1,则在复选框中设置一个钩子,如果值为 0,则取消选中
- sql - 删除 1.3 亿行
- spring - 我应该如何在 Spring Boot 中运行前端集成测试?
- python - 一定范围内的编码和解码
- composer-php - 如何查找和处理不在我的 composer.json 中的过时 composer 包的原因?
- java - MainActivity 中的按钮,DialogFragment 中的重置微调器
- bash - 提交后在 Slurm 中添加 Job Array 元素
- javascript - 为什么这个 JS 代码在 Windows 上写入漏洞文件的速度如此之慢?