web-dev-qa-db-ja.com

R-別のデータフレームの一致する値を使用して、データフレームに新しい列を追加します

Table2の一致するval2値でtable1に入力しようとしています

table1$New_val2 = table2[table2$pid==table1$pid,]$val2

enter image description here

しかし、私は警告を受け取ります

longer object length is not a multiple of shorter object length

テーブルの長さが同じではないため、これは十分に公平です。

正しい方法を教えてください。

16
andy

merge(table1, table2[, c("pid", "col2")], by="pid")

Table2に一致しないすべてのpidをtable1に保持するために、_all.x=TRUE_引数を追加します。

あなたは正しい軌道に乗っていました。ここにマッチを使用する方法があります...

table1$val2 <- table2$val2[match(table1$pid, table2$pid)]

25
cory

あなたがこれを意味するかどうかはわかりませんが、あなたは使うかもしれません:

newtable <- merge(table1,table2, by  = "pid") 

これにより、newtableという名前の新しいテーブルが作成され、3つの列とそれらの値がID(この場合は "pid")に一致します。

3
adrian1121

私はここに遅れていますが、他の誰かが同じ質問をした場合:
これはまさにdplyrのinner_mergeが行うことです。

table1.df <- dplyr::inner_merge(table1, table2, by=pid)

By-commandは、行の照合に使用する列を指定します。

2