У меня есть набор данных, который выглядит следующим образом:
# 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
Данные представляют собой данные панели, но нет уникального идентификатора панели.Первые два наблюдения относятся, например, к респонденту № 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) и, возможно, безошибочный способ справиться с этим?