【发布时间】:2019-03-27 20:32:26
【问题描述】:
我有一个如下所示的数据集:
# A tibble: 5,458 x 539
# Groups: country, id1 [2,729]
idstd id2 xxx id1 country year
<dbl+> <dbl> <dbl+lbl> <dbl+lbl> <chr> <dbl>
1 445801 NA NA 7 Albania 2009
2 542384 4616555 1163 7 Albania 2013
3 445802 NA NA 8 Albania 2009
4 542386 4616355 1162 8 Albania 2013
5 445803 NA NA 25 Albania 2009
6 542371 4616545 1161 25 Albania 2013
7 445804 NA NA 30 Albania 2009
8 542152 4616556 475 30 Albania 2013
9 445805 NA NA 31 Albania 2009
10 542392 4616542 1160 31 Albania 2013
数据是 paneldata,但没有唯一的 panel-id。例如,前两个观察结果是来自阿尔巴尼亚的第 7 号受访者,但第 7 号再次用于其他国家。 id2 然而是独一无二的。因此,我的计划是将id2 复制到相应受访者的NA 条目中。
我写了以下代码:
for (i in 1:nrow(df)) {
if (df$id1[i]== df$id1[i+1] & df$country[i] == df$country[i+1]) {
df$id2[i] <- df$id2[i+1]
}}
这给出了以下错误:
Error in if (df$id1[i] == df1$id1[i + 1] & : missing value where TRUE/FALSE needed
但它似乎确实有效。由于我的数据集很大,而且我不是很熟练,所以我不愿意接受我提出的解决方案,尤其是当它给出错误时。
谁能帮我解释一下这个错误?
此外,是否有更高效(例如 data.table)且可能无错误的方法来处理此问题?
【问题讨论】:
-
zoo::na.locf(id2, fromLast = TRUE)
标签: r for-loop data.table tidyverse