我有两个数据框,a和b,都有一个"状态"和"年"列(以及其他)。我试图将VARX的值从b转移到a。我用过这个:
for(i in seq_along(a)) {a$VARX[[i]]<-b$VARX[[which(b$state==a$state[[i]] & b$year==a$year[[i]])]]}
我收到此错误:
b$VARX[[which(b$state == a$state[[i]] & b$year ==
中的错误: 尝试选择少于一个元素
问题似乎是a
中有一些行没有b
中的相应行,因此无法选择元素。如何在这些情况下返回NA(a$VARX[i]=NA
),或者清除b
中没有相应行的所有情况?
答案 0 :(得分:0)
循环不是一个好选择。请参阅此工作示例:
a=data.frame(state=c("a","b","a"),year=c("2012","2013","2014"),VARX=c(1,2,3))
###################
state year VARX
1 a 2012 1
2 b 2013 2
3 a 2014 3
###################
b=data.frame(state=c("a","b","c"),year=c("2012","2013","2014"),VARX=c(4,5,6))
###################
state year VARX
1 a 2012 4
2 b 2013 5
3 c 2014 6
###################
# merge a and b
c=merge(a,b,by=c("state","year"),all.x=T,sort =F,suffixes = c(".a",""))
###################
state year VARX.a VARX
1 a 2012 1 4
2 b 2013 2 5
3 a 2014 3 NA
###################
# drop VARX in data frame a
subset(c,select=-VARX.a)
###################
state year VARX
1 a 2012 4
2 b 2013 5
3 a 2014 NA
###################