0
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))

我有表 1

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

我有表 2

  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的列标题匹配,我想要一个这样的新表:

结果表1

  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,所以不匹配。

结果表2

Table1:  
Table2: cc

有没有有效的方法来做这些?

4

1 回答 1

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

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

这将显示新colnames的内容Table2,但不是Table1[["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

于 2012-07-11T01:45:35.057 回答