问题描述
我正在尝试在基于另一个 DF 中包含的数据的数据框 (DF) 中创建一个新变量,其中 DF 1 是个人级数据,DF 2 是州级数据。为了说明,这里是 DF 1 的快照:
(DF1 <- data.frame("id"=1:5,"s1"=c("MA","MA","RI","NY","VT")))
id s1
1 1 MA
2 2 MA
3 3 RI
4 4 NY
5 5 VT
其中 ID = 个人参与者标识符,S1 = 居住地。
D2 看起来像:
(DF2 <- data.frame("state"=c("MA","VT"),"score"=1:4))
state score
1 MA 1
2 RI 2
3 NY 3
4 VT 4
其中 state 是美国的每个州,score 是衡量州级不平等不同方面的指数的值。 (实际上,DF2 有 51 行)。
我正在尝试在 DF1 中创建一个名为 s1_exposure 的新变量,该变量等于分配给 DF2 中每个状态的分数。我正在尝试这样的事情:
levels(DF1$s1)
states_s1 <- levels(DF1$s1)[1:4] # put state names in a list
DF1$s1_exposure <- 99
for(i in states_s1){
DF1$s1_exposure[DF1$s1==i] <- DF2$score[which(DF2$state==i)]
}
但是得到这个错误:
Error in DF1$s1_exposure[DF1$s1 == i] <- DF2$score[which(DF2$state == :
replacement has length zero
任何帮助将不胜感激!谢谢。
解决方法
我们可以使用连接
library(dplyr)
DF1 %>%
left_join(D22,by = c('s1' = 'state'))