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