接続したいデータフレームが2つあります。
したがって、最初のテーブルのいくつかの条件を満たす2番目のテーブルの列から値をフィルタリングするための2つのディメンションがあるためです。最初のデータフレームは次のようになります。
letter year value
A 2001
B 2002
C 2003
D 2004
二つ目:
letter 2001 2002 2003 2004
A 4 9 9 9
B 6 7 6 6
C 2 3 5 8
D 1 1 1 1
これは私にこのようなものを与えます
letter year value
A 2001 4
B 2002 7
C 2003 5
D 2004 1
thank all of you
1つのオプションは、row/column
インデックスを作成することです。ここで、行インデックスは行のシーケンスにすることができmatch
ますが、最初のデータの「年」列を2番目の列名で取得した列cbind
インデックスは、matrix
(「m1」)を作成し、それを使用して値を抽出するためのインデックスです。 2番目のデータセットから、それらを最初のデータの「value」列に割り当てます
i1 <- seq_len(nrow(df1))
j1 <- match(df1$year, names(df2)[-1])
m1 <- cbind(i1, j1)
df1$value <- df2[-1][m1]
df1
# letter year value
#1 A 2001 4
#2 B 2002 7
#3 C 2003 5
#4 D 2004 1
特定の例では、抽出するパターンはdiag
オナル要素のようです。その場合は、次を使用することもできます。
df1$value <- diag(as.matrix(df2[-1]))
df1 <- structure(list(letter = c("A", "B", "C", "D"), year = 2001:2004),
class = "data.frame", row.names = c(NA,
-4L))
df2 <- structure(list(letter = c("A", "B", "C", "D"), `2001` = c(4L,
6L, 2L, 1L), `2002` = c(9L, 7L, 3L, 1L), `2003` = c(9L, 6L, 5L,
1L), `2004` = c(9L, 6L, 8L, 1L)), class = "data.frame",
row.names = c(NA,
-4L))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加