如何通过匹配列标题组合两个表并获取缺少的数据列表?

时间:2012-07-11 01:16:10

标签: r

Table1 <- data.frame(CName  = c("aa", "bb", "cc", "dd"),
                     number = c("X11", "X22", "X33", "X44"))

Table2 <- data.frame(PName = c("zz", "yy", "xx", "ww"),
                     "X11" = c(5, 6, 3, 5),
                     "X22" = c(7, 5, 4, 3),
                     "X44" = c(9, 9, 1, 1))

我得到了Table1

  CName number
1    aa    X11
2    bb    X22
3    cc    X33
4    dd    X44

我得到了Table2

  PName X11 X22 X44
1    zz   5   7   9
2    yy   6   5   9
3    xx   3   4   1
4    ww   5   3   1

我想获得两个文件:

(1)通过将表1的CName与表2的列标题相匹配,我希望有一个像这样的新表:

ResultsTable1

  PName  aa  bb  dd
1    zz   5   7   9
2    yy   6   5   9
3    xx   3   4   1
4    ww   5   3   1

我也想知道缺少什么,即在这个例子中,表2中缺少cc,所以它不匹配。

ResultTable2

Table1:  
Table2: cc

有没有有效的方法呢?

1 个答案:

答案 0 :(得分:2)

根据Table2

中的值设置Table1第一列以外的列名称
colnames(Table2)[-1] <- as.character(Table1[Table1[["number"]] %in% colnames(Table2)[-1], "CName"]) 
Table2
#  PName aa bb dd
#1    zz  5  7  9
#2    yy  6  5  9
#3    xx  3  4  1
#4    ww  5  3  1

这将显示Table1[["CName"]]colnames的新Table2中的内容{/ 1}}

as.character(Table1[["CName"]][!Table1[["CName"]] %in% colnames(Table2)[-1]])
#[1] "cc"

这将显示colnames Table2Table1[["CName"]]的内容,而不是as.character(colnames(Table2)[-1][!colnames(Table2)[-1] %in% Table1[["CName"]]]) #character(0)

%in%

也许?match语法的一些简单示例会有所帮助(请注意A %in% B中记录了这一点,match(A, B, nomatch=0) > 0只是A <- c("A", "B", "D", "E") B <- c("B", "C", "D") A %in% B #[1] FALSE TRUE TRUE FALSE !A %in% B #[1] TRUE FALSE FALSE TRUE A[A %in% B] #[1] "B" "D" A[!A %in% B] #[1] "A" "E" B[B %in% A] #[1] "B" "D" B[!B %in% A] #[1] "C"

as.character

对于您的数据,我使用factorcharacter转换为{{1}}