Замена NA в столбцах значениями из строк в другом кадре данных в R, имеющих одинаковый идентификатор - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть два кадра данных:

    deploy.info <- data.frame(Echo_ID = c("20180918_7.5Fa_1", "20180918_Sebre_3", "20190808_Bake_2", "20190808_NH_2"), 
                      uppermost_bin = c(2, 7, 8, 12))

    spc <- data.frame(species = c("RS", "GS", "YG", "RR", "BR", "GT", "CB"), 
              percent_dist = c(0, 25, 80, 100, 98, 60, 100), 
              percent_dist_from_surf = c(0, 25, 80, 100, 98, 60, 100),
              '20180918_7.5Fa_1' = c(1, 1, 1, "NA", "NA", 1, "NA"),
              '20180918_Sebre_3' = c(1, 2, "NA", "NA", "NA", 4, "NA"), 
              '20190808_Bake_2' = c(1, 3, 7, "NA", "NA", 6, "NA"), 
              '20190808_NH_2' = c(1, 2, 8, "NA", "NA", 6, "NA"))

Последние четыре столбца в кадре данных sp c относятся к каждому Echo_ID, с которым я имею дело в кадре данных deploy.info. Я хочу заменить NA в кадре данных sp c на самые верхние значения для каждого из Echo_ID. Кто-нибудь знает, как go сделать это?

Мой желаемый конечный продукт будет выглядеть так:

    i.want.this <- data.frame(species = c("RS", "GS", "YG", "RR", "BR", "GT", "CB"), 
                      percent_dist = c(0, 25, 80, 100, 98, 60, 100), 
                      percent_dist_from_surf = c(0, 25, 80, 100, 98, 60, 100),
                      '20180918_7.5Fa_1' = c(1, 1, 1, 2, 2, 1, 2),
                      '20180918_Sebre_3' = c(1, 2, 7, 7, 7, 4, 7), 
                      '20190808_Bake_2' = c(1, 3, 7, 8, 8, 6, 8), 
                      '20190808_NH_2' = c(1, 2, 8, 12, 12, 6, 12))

У меня более 100 таких столбцов, и я бы не стал go в и нужно сделать это изменение вручную. Любые идеи с благодарностью.

1 Ответ

0 голосов
/ 27 апреля 2020

Мы можем использовать от Map до replace элементов NA в столбцах Echo_ID с соответствующими значениями uppermost_bin. В наборе данных OP столбцы были factor, поэтому он был преобразован в правильный тип с помощью type.convert

nm1 <- paste0("X", deploy.info$Echo_ID)
spc <- type.convert(spc, as.is = TRUE) 
spc[nm1] <- Map(function(x, y) replace(x, is.na(x), y), 
          spc[nm1], deploy.info$uppermost_bin)
spc
#  species percent_dist percent_dist_from_surf X20180918_7.5Fa_1 X20180918_Sebre_3 X20190808_Bake_2 X20190808_NH_2
#1      RS            0                      0                 1                 1                1              1
#2      GS           25                     25                 1                 2                3              2
#3      YG           80                     80                 1                 7                7              8
#4      RR          100                    100                 2                 7                8             12
#5      BR           98                     98                 2                 7                8             12
#6      GT           60                     60                 1                 4                6              6
#7      CB          100                    100                 2                 7                8             12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...