R - 当其他列没有丢失时,将列中的值替换为另一列的值

时间:2017-11-18 02:01:08

标签: r

我有以下数据框:

    IID sex longitude latitude longitude.1 latitude.1 longitude.2 latitude.2
1234587   0    351500   383500          NA         NA          NA         NA
5145633   1    431340   265505          NA         NA          NA         NA
1305430   1    449500   244900      262500     265500          NA         NA
5012044   0    445600   514300          NA         NA          NA         NA
1234059   1        NA       NA      514300     514300      445500     445520
3087662   0    444500   425200          NA         NA          NA         NA
....
....etc

我希望将longitude的值替换为longitude.1的值,只要longitude.1不缺失,并且对纬度和纬度执行相同的操作。我认为这应该很简单并尝试以下方法:

MyData$longitude[!is.na(MyData$longitude.1)] <- MyData$longitude.1
MyData$latitude[!is.na(MyData$latitude.1)] <- MyData$latitude.1

但是,我收到以下错误:

Warning message:
In MyData$longitude[!is.na(MyData$longitude.1)] <- MyData$longitude.1 :
  number of items to replace is not a multiple of replacement length

我做错了什么?

结果应该是这样的:

    IID sex longitude latitude longitude.1 latitude.1 longitude.2 latitude.2
1234587   0    351500   383500          NA         NA          NA         NA
5145633   1    431340   265505          NA         NA          NA         NA
1305430   1    262500   265500      262500     265500          NA         NA
5012044   0    445600   514300          NA         NA          NA         NA
1234059   1    514300   514300      514300     514300      445500     445520
3087662   0    444500   425200          NA         NA          NA         NA
....
....etc

1 个答案:

答案 0 :(得分:1)

MyData$longitude[!is.na(MyData$longitude.1)]产生2 NA,而MyData$longitude.1是所有6个值。所以分配失败了。获取非NA的longitude.1

MyData$longitude[!is.na(MyData$longitude.1)] <- MyData$longitude.1[!is.na(MyData$longitude.1)]

MyData$latitude[!is.na(MyData$latitude.1)] <- MyData$latitude.1[!is.na(MyData$latitude.1)]