我有两个这样的数据框:
df.1 <- data.frame(
var.1 = sample(1:10),
code = sample(c("A", "B", "C"), 10, replace = TRUE))
df.2 <- data.frame(
var.2 = sample(1:3),
row.names=c("A","B","C"))
我需要做的是添加第三列df.1 $ var.2,对于df.1 $ code中的每个值,将df.2 $ var.2中的值与其行名相对应。 / p>
我达到了这一点,但没有成功..建议?
for (i in 1:length(df.1$code)){
if(df.1$code[i] == rownames(df.2))
df.1$var.2[i] <- df.2$var.2
}
答案 0 :(得分:2)
你的意思是这样的:
df.2$code <- rownames(df.2)
> merge(df.1,df.2,by = "code")
code var.1 var.2
1 A 5 1
2 B 3 2
3 B 2 2
4 B 7 2
5 B 10 2
6 C 8 3
7 C 4 3
8 C 1 3
9 C 9 3
10 C 6 3
答案 1 :(得分:0)
或者,来自join()
包的plyr
以保留df.1的顺序
df.2$code <- rownames(df.2)
library(plyr)
join(df.1, df.2, by = "code")
var.1 code var.2
1 7 B 2
2 2 A 1
3 3 C 3
4 6 B 2
5 10 C 3
6 4 C 3
7 1 C 3
8 8 B 2
9 9 A 1
10 5 C 3