提问人:Seyma Kalay 提问时间:5/4/2023 更新时间:5/5/2023 访问量:27
R 中列表中的 rbind(文本到列)
rbind in a list in r (text to column)
问:
我在一个目录中有 3 个文件。数据集具有标题和格式。.csv
text; text; text;
`list_data <- list("Red; Green",
"Green; Blue",
"Blue; Yellow")
print(list_data)`
我想根据相同的标头将它们合并为 1 个 .csv。
files <- list.files(pattern = '\\.csv')
tables <- lapply(files, read.csv, header = TRUE)
combined.df <- do.call(rbind , tables)
str(combined.df)
如何解决这个问题?提前非常感谢。
答:
1赞
r2evans
5/5/2023
#1
对实际数据进行一些假设,我将稍微更改示例数据:
list_data <- list(file1="Red; Green\n1;2", file2="Green; Blue\n3;4", file3="Blue; Yellow\n5;6")
我添加了名称以启用在数据行中保留文件名的选项(远在下面)。
# tables <- lapply(setNames(nm = files), read.csv2) # what you call with a file list
tables <- lapply(list_data, function(z) read.csv2(text = z))
str(tables)
# List of 3
# $ file1:'data.frame': 1 obs. of 2 variables:
# ..$ Red : int 1
# ..$ Green: int 2
# $ file2:'data.frame': 1 obs. of 2 variables:
# ..$ Green: int 3
# ..$ Blue : int 4
# $ file3:'data.frame': 1 obs. of 2 variables:
# ..$ Blue : int 5
# ..$ Yellow: int 6
dplyr::bind_rows(tables)
# Red Green Blue Yellow
# 1 1 2 NA NA
# 2 NA 3 4 NA
# 3 NA NA 5 6
data.table::rbindlist(tables, fill = TRUE, use.name = TRUE)
# Red Green Blue Yellow
# <int> <int> <int> <int>
# 1: 1 2 NA NA
# 2: NA 3 4 NA
# 3: NA NA 5 6
如果要保留每一行的文件名,则
dplyr::bind_rows(tables, .id = "filename")
# filename Red Green Blue Yellow
# 1 file1 1 2 NA NA
# 2 file2 NA 3 4 NA
# 3 file3 NA NA 5 6
data.table::rbindlist(tables, fill = TRUE, use.name = TRUE, idcol = "filename")
# filename Red Green Blue Yellow
# <char> <int> <int> <int> <int>
# 1: file1 1 2 NA NA
# 2: file2 NA 3 4 NA
# 3: file3 NA NA 5 6
上一个:在 R 中合并列表中的常见列
下一个:使用列集进行更长的透视
评论
list_data
read.csv
sep=","
list_data
;
read.csv2
dplyr::bind_rows(tables)
data.table::rbindlist(tables, fill=TRUE, use.names=TRUE)