我目前正在尝试读取包含长度不等的数据帧列表的 CSV 文件。在每个数据框的末尾,应该有 NA
值或字母列表来分隔每个数据框。是否可以基于此文件创建新的数据框列表?我相信这会减少我正在运行我的程序的计算机的内存问题。例如,下面的代码创建了一个包含两个数据框的列表。它由它们的列名分隔。
d1 <- data.frame(y1 = c(1, 2),
y2 = c(4, 5))
d2 <- data.frame(y1 = c(3, 2, 1),
y2 = c(6, 5, 4))
my.list <- list(d1, d2)
lapply(my.list, function(x) write.table(data.frame(x),
'~/mylist.csv',
append = TRUE, sep=','))
虽然我知道由于提供了第一列,因此名称不一定对应于正确的列。我仍然想知道是否可以将数据分离到数据框列表中,因为我的条目比提供的示例多得多。如果可以删除过程中的第一列会有帮助,但我认为没有必要,因为 [, -1]
在加载数据时似乎可以工作。
提前致谢。
答案 0 :(得分:1)
通过在 row.names = FALSE
中设置 write.table
可以避免写入数据帧时的第一列问题。
lapply(my.list, function(x)
write.table(x,'mylist.csv',append = TRUE, sep=',', row.names = FALSE))
要从 mylist.csv
恢复数据帧列表,您可以:
#read the csv file
dat <- read.csv('mylist.csv')
#Create a group column to split the data
inds1 <- cumsum(dat[[1]] == names(dat)[1])
#Remove the rows where 1st column is equal to first column name.
inds2 <- dat[[1]] != names(dat)[1]
#split the data into list of dataframes
my.list <- split(dat[inds2, ], inds1[inds2])
my.list
#$`0`
# y1 y2
#1 1 4
#2 2 5
#$`1`
# y1 y2
#4 3 6
#5 2 5
#6 1 4