R 用不一致的列组合不同的表
我正在尝试合并列数不相同的不同表。很少有人有额外的栏目 这里我展示一个简单的例子R 用不一致的列组合不同的表,r,reshape,dplyr,rbind,R,Reshape,Dplyr,Rbind,我正在尝试合并列数不相同的不同表。很少有人有额外的栏目 这里我展示一个简单的例子 a <- structure(list(CrashID = c("3409", "3410", "6790", "1100", "1200", "5609", "6730", "1220", "1234", "1239", "4409", "5610", "6794", "1123", "1245", "5634", "6732"), From = c("0", "0", "0", "0", "1", "
a <- structure(list(CrashID = c("3409", "3410", "6790", "1100", "1200", "5609", "6730", "1220", "1234", "1239", "4409", "5610", "6794", "1123", "1245", "5634", "6732"),
From = c("0", "0", "0", "0", "1", "1", "3", "3", "3", "3", "8", "8", "8", "8","1", "1", "1"), To = c("1", "1", "1", "1", "3", "3", "4", "4", "4", "4", "9", "9", "9", "9", "2.2", "2.2", "2.2"), Dr = c("1", "6", "6", "6", "6", "4", "5", "4", "4", "4", "7", "7", "7", "4", "7", "7", "7"), Mn = c("4", "6", "5", "6", "3", "6", "4", "4", "4", "4", "9", "9", "9", "9", "3", "4", "7"), CSECT = c("001-01", "001-01", "001-01", "001-01", "001-01", "001-01", "001-01", "001-01", "001-01", "001-01", "001-02", "001-02","001-02","001-02","001-02","001-02","001-02")), .Names = c("CrashID", "From", "To", "Dr", "Mn", "CSECT" ), row.names = c(NA, -17L), class = "data.frame")
a
CrashID From To Dr Mn CSECT
1 3409 0 1 1 4 001-01
2 3410 0 1 6 6 001-01
3 6790 0 1 6 5 001-01
4 1100 0 1 6 6 001-01
5 1200 1 3 6 3 001-01
6 5609 1 3 4 6 001-01
7 6730 3 4 5 4 001-01
8 1220 3 4 4 4 001-01
9 1234 3 4 4 4 001-01
10 1239 3 4 4 4 001-01
11 4409 8 9 7 9 001-02
12 5610 8 9 7 9 001-02
13 6794 8 9 7 9 001-02
14 1123 8 9 4 9 001-02
15 1245 1 2.2 7 3 001-02
16 5634 1 2.2 7 4 001-02
17 6732 1 2.2 7 7 001-02
b <- structure(list(CrashID = c("12409", "12410", "62290", "13330"),
From = c("1", "2", "3", "4"), To = c("4", "4", "4", "4"), Dr = c("1", "3", "3", "3"),
CSECT = c("0301-01", "0031-01", "0301-01", "0031-01")), .Names = c("CrashID", "From", "To", "Dr", "CSECT" ), row.names = c(NA, -4L), class = "data.frame")
b
CrashID From To Dr CSECT
1 12409 1 4 1 0301-01
2 12410 2 4 3 0031-01
3 62290 3 4 3 0301-01
4 13330 4 4 3 0031-01
>
c <- structure(list(CrashID = c("3569", "3430", "6660", "1400", "1700", "5979", "6530", "1320", "1334", "1669", "4559", "5510", "6733", "3333", "1257", "544", "6632"),
To = c("1", "2", "2", "2", "7", "7", "7", "7", "7", "7", "7", "8", "8", "9", "5.2", "4.2", "8.2"), CSECT = c("090-01", "090-01", "090-01", "090-01", "090-01", "001-0w", "090-06", "001-r5", "001-44", "031-01", "031-02", "031-32","031-02","331-02","001-we","301-02","031-02")), .Names = c("CrashID", "To", "CSECT" ), row.names = c(NA, -17L), class = "data.frame")
c
CrashID To CSECT
1 3569 1 090-01
2 3430 2 090-01
3 6660 2 090-01
4 1400 2 090-01
5 1700 7 090-01
6 5979 7 001-0w
7 6530 7 090-06
8 1320 7 001-r5
9 1334 7 001-44
10 1669 7 031-01
11 4559 7 031-02
12 5510 8 031-32
13 6733 8 031-02
14 3333 9 331-02
15 1257 5.2 001-we
16 544 4.2 301-02
17 6632 8.2 031-02
试试这个解决方案。在这里,我们创建一个数据帧列表,然后使用
tidyr
的unnest()
函数将数据帧转换为一个名为Table
的列
library('devtools')
install_github('hadley/tidyr')
library('tidyr')
dfs <- list(a = a, b = b, c = c)
combined <- unnest(dfs, Table)
要使用NAs替换空字符串,请执行以下操作:
combined[combined == ''] <- NA
combined[combined='']或者您可以使用plyr
中的join\u all
。(初始数据集都有字符
列)。使用@Kara-Woo的dfs
library(plyr)
join_all(Map(cbind, dfs, Table=names(dfs)), type="full")
# CrashID From To Dr Mn CSECT Table
#1 3409 0 1 1 4 001-01 a
#2 3410 0 1 6 6 001-01 a
#3 6790 0 1 6 5 001-01 a
#4 1100 0 1 6 6 001-01 a
#5 1200 1 3 6 3 001-01 a
#6 5609 1 3 4 6 001-01 a
#7 6730 3 4 5 4 001-01 a
#8 1220 3 4 4 4 001-01 a
#9 1234 3 4 4 4 001-01 a
#10 1239 3 4 4 4 001-01 a
#11 4409 8 9 7 9 001-02 a
#12 5610 8 9 7 9 001-02 a
#13 6794 8 9 7 9 001-02 a
#14 1123 8 9 4 9 001-02 a
#15 1245 1 2.2 7 3 001-02 a
#16 5634 1 2.2 7 4 001-02 a
#17 6732 1 2.2 7 7 001-02 a
#18 12409 1 4 1 <NA> 0301-01 b
#19 12410 2 4 3 <NA> 0031-01 b
#20 62290 3 4 3 <NA> 0301-01 b
#21 13330 4 4 3 <NA> 0031-01 b
#22 3569 <NA> 1 <NA> <NA> 090-01 c
#23 3430 <NA> 2 <NA> <NA> 090-01 c
#24 6660 <NA> 2 <NA> <NA> 090-01 c
#25 1400 <NA> 2 <NA> <NA> 090-01 c
#26 1700 <NA> 7 <NA> <NA> 090-01 c
#27 5979 <NA> 7 <NA> <NA> 001-0w c
#28 6530 <NA> 7 <NA> <NA> 090-06 c
#29 1320 <NA> 7 <NA> <NA> 001-r5 c
#30 1334 <NA> 7 <NA> <NA> 001-44 c
#31 1669 <NA> 7 <NA> <NA> 031-01 c
#32 4559 <NA> 7 <NA> <NA> 031-02 c
#33 5510 <NA> 8 <NA> <NA> 031-32 c
#34 6733 <NA> 8 <NA> <NA> 031-02 c
#35 3333 <NA> 9 <NA> <NA> 331-02 c
#36 1257 <NA> 5.2 <NA> <NA> 001-we c
#37 544 <NA> 4.2 <NA> <NA> 301-02 c
#38 6632 <NA> 8.2 <NA> <NA> 031-02 c
库(plyr)
join_all(Map(cbind,dfs,Table=names(dfs)),type=“full”)
#从CrashID到Dr Mn CSECT表
#1340901014001-01A
#2341016001-01 a
#3679001-01 a
#4110016001-01A
#5 1200 1 3 6 3 001-01 a
#65609134001-01A
#7 6730 3 4 5 4 001-01 a
#81220 3 4 4 001-01 a
#9 1234 3 4 001-01 a
#1012934001-01 a
#114409879001-02A
#12561089979001-02A
#1367948979001-02A
#1411238949001-02A
#15 1245 1 2.2 7 3 001-02 a
#16563412.274001-02A
#17 6732 1 2.2 7 001-02 a
#1812409141031-01B
#1912410243031-01B
#20 62290 3 4 3 0301-01 b
#21133304430031-01B
#22 3569 1 090-01 c
#2334302090-01 c
#2466602090-01摄氏度
#2514002090-01摄氏度
#261700 7090-01摄氏度
#27 5979 7 001-0w c
#2865307090-06C
#2913207001-r5 c
#30 1334 7 001-44 c
#31 1669 7 031-01 c
#3245597031-02C
#335510831-32C
#3467338031-02C
#3533339331-02C
#36 1257 5.2 001 we c
#37 544 4.2 301-02 c
#38 6632 8.2 031-02 c
请使用merge
包含代码的一部分,这样我们就可以识别出哪里出了问题。这是一个打字错误。我想用“rbind”像m+1来表示unest
。是否有任何选项可以使用NAs
来查找缺少的值?@akrun我不确定这是否是unnest()
中的一个选项,可能只是在事后将空字符串替换为NAs
。能够将数据帧列表与unnest()
组合在一起是一项非常重要的功能。感谢您的回复。希望,unest
在不久的将来会有更多的参数。
combined[combined == ''] <- NA
library(plyr)
join_all(Map(cbind, dfs, Table=names(dfs)), type="full")
# CrashID From To Dr Mn CSECT Table
#1 3409 0 1 1 4 001-01 a
#2 3410 0 1 6 6 001-01 a
#3 6790 0 1 6 5 001-01 a
#4 1100 0 1 6 6 001-01 a
#5 1200 1 3 6 3 001-01 a
#6 5609 1 3 4 6 001-01 a
#7 6730 3 4 5 4 001-01 a
#8 1220 3 4 4 4 001-01 a
#9 1234 3 4 4 4 001-01 a
#10 1239 3 4 4 4 001-01 a
#11 4409 8 9 7 9 001-02 a
#12 5610 8 9 7 9 001-02 a
#13 6794 8 9 7 9 001-02 a
#14 1123 8 9 4 9 001-02 a
#15 1245 1 2.2 7 3 001-02 a
#16 5634 1 2.2 7 4 001-02 a
#17 6732 1 2.2 7 7 001-02 a
#18 12409 1 4 1 <NA> 0301-01 b
#19 12410 2 4 3 <NA> 0031-01 b
#20 62290 3 4 3 <NA> 0301-01 b
#21 13330 4 4 3 <NA> 0031-01 b
#22 3569 <NA> 1 <NA> <NA> 090-01 c
#23 3430 <NA> 2 <NA> <NA> 090-01 c
#24 6660 <NA> 2 <NA> <NA> 090-01 c
#25 1400 <NA> 2 <NA> <NA> 090-01 c
#26 1700 <NA> 7 <NA> <NA> 090-01 c
#27 5979 <NA> 7 <NA> <NA> 001-0w c
#28 6530 <NA> 7 <NA> <NA> 090-06 c
#29 1320 <NA> 7 <NA> <NA> 001-r5 c
#30 1334 <NA> 7 <NA> <NA> 001-44 c
#31 1669 <NA> 7 <NA> <NA> 031-01 c
#32 4559 <NA> 7 <NA> <NA> 031-02 c
#33 5510 <NA> 8 <NA> <NA> 031-32 c
#34 6733 <NA> 8 <NA> <NA> 031-02 c
#35 3333 <NA> 9 <NA> <NA> 331-02 c
#36 1257 <NA> 5.2 <NA> <NA> 001-we c
#37 544 <NA> 4.2 <NA> <NA> 301-02 c
#38 6632 <NA> 8.2 <NA> <NA> 031-02 c