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

私は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

私は2つのファイルを取得したい:

(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

また、何が欠けているかを知りたいです。つまり、この例では、cc が Table2 で欠落しているため、一致しません。

結果表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"]]ますcolnamesTable2

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%ことに注意してください?matchA %in% Bmatch(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

于 2012-07-11T01:45:35.057 に答える