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
有没有有效的方法呢?
答案 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
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
对于您的数据,我使用factor
将character
转换为{{1}}