使用read_table与for循环合并数据框时遇行数不匹配错误求解决
问题:合并多文本文件到数据框时出现行数不匹配错误
尝试用for循环结合read_table将3个文本文件(均为2946行)按列合并到同一数据框,执行代码如下:
te <- list.files("UCI HAR Dataset/test") te <- te[-1] testdf <- data.frame() for (i in 1:3){ testdf <- cbind(testdf, read_table(te[i])) }
触发错误:
Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 0, 2946
推测错误源于初始空数据框(0行)与待合并文件(2946行)的行数冲突,寻求更优实现方式。
解决方案
方式一:先读取第一个文件初始化数据框
避免用空数据框作为起始,先读取第一个文件创建初始数据框,再循环合并剩余文件:
te <- list.files("UCI HAR Dataset/test") te <- te[-1] # 用第一个文件初始化数据框 testdf <- read_table(te[1]) # 循环合并剩余文件 for (i in 2:3){ testdf <- cbind(testdf, read_table(te[i])) }
方式二:用purrr包实现批量读取+列合并
借助purrr的map_dfc函数,实现更简洁的向量化操作,无需手动循环:
library(purrr) library(readr) te <- list.files("UCI HAR Dataset/test")[-1] # 批量读取所有文件并按列合并 testdf <- map_dfc(te, read_table)
方式三:用lapply+do.call组合实现
先批量读取所有文件到数据框列表,再统一按列合并:
te <- list.files("UCI HAR Dataset/test")[-1] # 批量读取生成数据框列表 df_list <- lapply(te, read_table) # 合并列表中的所有数据框 testdf <- do.call(cbind, df_list)
内容的提问来源于stack exchange,提问作者kswp
相关产品推荐
相关产品推荐

