我有两个数据框如下:
df1 <- t(data.frame(seq(1,6,by=1),seq(6,1,by=-1)))
colnames(df1) <- c("A","B","C","D","E","F)
rownames(df1) <- c("a","b")
df2 <- data.frame(rep(colnames(df1),2),rep(rownames(df1),6))
colnames(df2) <- c("Vector1","Vector2")
这样
DF1
A B C D E F
a 1 2 3 4 5 6
b 6 5 4 3 2 1
DF2
Vector1 Vector2
A a
B b
C a
D b
E a
F b
A a
B b
C a
D b
E a
F b
我想将df2的列值与df1的列名和行名匹配,并将相应的值填入df2中的新列,如下所示:
Vector1 Vector2 Newcol
A a 1
B b 5
C a 3
D b 3
E a 5
F b 1
A a 1
B b 5
C a 3
D b 3
E a 5
F b 1
我们非常感谢任何建议。感谢。
答案 0 :(得分:1)
我们可以将merge
与melt
一起使用。 melt
返回三列data.frame
,merge
与第二个数据集一起创建新列
library(reshape2)
merge(df2, melt(df1), by.x = c("Vector1", "Vector2"), by.y = c("Var2", "Var1"))
或base R
选项是在match
&lt; df2&#39;之后获取paste
的数字索引。按行(do.call(paste
)并获取paste
d列名称和行名称&#39; df1&#39;使用outer
。使用数字索引,我们得到&#39; df1&#39;创建&#39; Newcol&#39;
df2$Newcol <- df1[match(do.call(paste, df2),
t(outer(colnames(df1), rownames(df1), FUN = paste)))]
df2$Newcol
#[1] 1 5 3 3 5 1 1 5 3 3 5 1