Заполнение NA путем копирования содержимого других строк в R

у меня есть набор данных, который похож на таблицу ниже. что я хочу сделать, так это заменить NA для каждого идентификатора доступными данными в этом соответствующем идентификаторе, кроме переменной результата, которую я хочу предсказать. например, для идентификатора 1 я хочу скопировать информацию с 1990 по 1991, 1992, 1993. для идентификатора 2 я должен скопировать информацию с 1992 по 1990, 1991 и 1993 годы. Идентификатор представляет собой кластер, скажем, деревню. в конце концов я хочу предсказать результат на недостающие годы. я хочу сделать это в R.

   ID YeStart Author YEAR   Lat    Long Outome
     1    1990  Goroo 2012 23.45 -16.718     20
     1    1991   <NA>   NA    NA      NA     30
     1    1992   <NA>   NA    NA      NA     NA
     1    1993   <NA>   NA    NA      NA     NA
     2    1990   <NA>   NA    NA      NA      2
     2    1991   <NA>   NA    NA      NA     NA
     2    1992 Berthe 2012 20.45 -16.718     NA
     2    1993   <NA>   NA    NA      NA     NA
     3    1990   <NA>   NA    NA      NA     NA
     3    1991 Berthe 2012 40.45 -16.718     NA
     3    1992   <NA>   NA    NA      NA     NA
     3    1993   <NA>   NA    NA      NA     50

person jonestats    schedule 28.11.2012    source источник
comment
Привет, @jonestats, вы все еще не приняли ответы на свои предыдущие вопросы. Найдите секунду и разберитесь в этом. Вы просто нажимаете галочку рядом с ответом, который хотите принять.   -  person Matthew Plourde    schedule 28.11.2012
comment
позвольте мне проверить и сделать это сейчас. Вчера я поставил галочку "да", чтобы указать, что это было полезно, и больше не могу найти эту опцию.   -  person jonestats    schedule 28.11.2012


Ответы (1)


Я почти уверен, что ответ на этот вопрос уже есть на сайте. Но вы можете сделать это с помощью функций merge и complete.cases.

d <- read.table(text="ID YeStart Author YEAR   Lat    Long Outome
     1    1990  Goroo 2012 23.45 -16.718     20
     1    1991   <NA>   NA    NA      NA     30
     1    1992  Goroo 2012 23.45 -16.718     NA
     1    1993   <NA>   NA    NA      NA     NA
     2    1990   <NA>   NA    NA      NA      2
     2    1991   <NA>   NA    NA      NA     NA
     2    1992 Berthe 2012 20.45 -16.718     NA
     2    1993   <NA>   NA    NA      NA     NA
     3    1990   <NA>   NA    NA      NA     NA
     3    1991 Berthe 2012 40.45 -16.718     NA
     3    1992   <NA>   NA    NA      NA     NA
     3    1993   <NA>   NA    NA      NA     50", header=TRUE)

d1 <- d[c('ID', 'YeStart', 'Outome')]
d2 <- d[! names(d) %in% c('Outome', 'YeStart')]
merge(d1, unique(d2[complete.cases(d2), ]))

#    ID YeStart Outome Author YEAR   Lat    Long
# 1   1    1990     20  Goroo 2012 23.45 -16.718
# 2   1    1991     30  Goroo 2012 23.45 -16.718
# 3   1    1992     NA  Goroo 2012 23.45 -16.718
# 4   1    1993     NA  Goroo 2012 23.45 -16.718
# 5   2    1990      2 Berthe 2012 20.45 -16.718
# 6   2    1991     NA Berthe 2012 20.45 -16.718
# 7   2    1992     NA Berthe 2012 20.45 -16.718
# 8   2    1993     NA Berthe 2012 20.45 -16.718
# 9   3    1990     NA Berthe 2012 40.45 -16.718
# 10  3    1991     NA Berthe 2012 40.45 -16.718
# 11  3    1992     NA Berthe 2012 40.45 -16.718
# 12  3    1993     50 Berthe 2012 40.45 -16.718
person Matthew Plourde    schedule 28.11.2012
comment
Большое спасибо за то, что все работает отлично. где можно узнать некоторые из этих вещей. знаете ли вы какую-либо ссылку, которая может быть мне полезна. - person jonestats; 28.11.2012
comment
Есть много руководств. Хорошее место для начала - таблица словаря языка R Хэдли Уикхэм (github.com/hadley/devtools/wiki/ словарь). После этого я бы порекомендовал прочитать книгу Патрика Бернса R Inferno. Это бесплатно, просто погуглите. - person Matthew Plourde; 28.11.2012
comment
привет, я понял, что если в кластере есть данные за более чем 2 года, то они дублируются дважды. например, если в кластере 1 есть данные в 1990 и 1992 годах, тогда, когда я заполню случаи, у меня будет 8 точек данных кластера 1 вместо обычных 4, так что у меня будет 2 1990,2 1991, 2 1992 и 2 1993. если это в течение 3 лет, то дает 12 баллов. как я могу это обойти? - person jonestats; 29.11.2012
comment
Большое спасибо. Задача решена. Спасибо за материалы, которые вы прочитали. Я трачу время на их тщательное изучение. Я очень ценю вашу поддержку. - person jonestats; 29.11.2012