我有很多csv文件,我试图通过“data.table”读取 . csv文件的结构相同(3列) .
我的目标是在一个主数据帧中读取所有csv文件!应将每个csv文件添加为不在行中的列 .
例如:
我的主要DF结构应该是这样的:
Name Name2 csv_file_name_1 csv_file_name_2 .......
现在,我想要做的是:读取新的csv文件(我只读取第3列)并添加到DF作为列 .
例如,如果我有30个csv文件,我必须阅读所有这些文件,并在主数据框中添加第3列作为新列 . (最终DF应该有30列)
我写了一些代码,我可以读取文件并获取文件名,一切运行良好 .
files = list.files(path = path, pattern=".*csv")
for (i in 1:length(files)) assign(str_sub(files[i],11,-5),
fread(files[i],colClasses = c("NULL", "NULL", NA)))
但我如何添加为主DF的列? “assign”正在创建新的数据帧!
2 回答
你试过
cbind
吗?理想情况下,每个CSV表都有一个唯一的标识符,允许您通过该标识符进行合并 .
附注,使用
cbind
,注意确保每个data.frame中的行对应于相同的观察(即df1中的第一行与df2中的第1行相同) .您可以使用
cbind()
来实现此目的,它可以将您读取的每个新数据框绑定到现有数据框 . 我之所以说可能,因为如果您希望每个读取的CSV文件具有相同的行数,那么这只会很有意义 . 应该清楚为什么这是一个要求 . 有了这个警告,这里有一个代码片段,它读入两个CSV文件,以提供您想要的输出类型: