当尝试选择失败且“尝试选择少于一个元素”时,如何通过NA?

时间:2014-11-10 00:29:37

标签: r for-loop

我有两个数据框,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中没有相应行的所有情况?

1 个答案:

答案 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
###################