Попытка объединить столбцы с тем же именем и преобразование наблюдения в новые строки - PullRequest
0 голосов
/ 08 мая 2020

Привет, я пытаюсь объединить имена столбцов с одинаковыми именами. Вот часть моих данных.

                 EL SALVADOR  HONDURAS  NICARAGUA   GUATEMALA   GUATEMALA
    TOTAL_CBP     18.00000    16.00000  7.00000     17.00000    9.00000

Я хочу объединить столбцы Гватемалы и создать новую строку, чтобы разместить данные с NA в других столбцах.

Сейчас это фрейм данных. Пытаюсь сохранить это так.

Я пытаюсь сделать это с помощью трубопроводов, но если вы порекомендуете другой способ, дайте мне знать. Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Мы можем использовать split.default для разделения столбцов с похожими именами, создания фрейма данных с одним столбцом для каждого списка, ввода одинаковой длины и преобразования в фрейм данных.

list_df <- lapply(split.default(df, names(df)), function(x) 
                  setNames(data.frame(unlist(x)), names(x)[1]))
max_len <- max(sapply(list_df, nrow))
data.frame(sapply(list_df, function(x) x[1:max_len, ]))

#  EL.SALVADOR GUATEMALA HONDURAS NICARAGUA
#1          18        17       16         7
#2          NA         9       NA        NA
0 голосов
/ 08 мая 2020

Вот один метод, предполагающий, что это matrix

un1 <- unique(colnames(m1))
lst1 <- setNames(lapply(un1, function(x)  unname(c(m1[, colnames(m1) == x]))), un1)
do.call(cbind, lapply(lst1, `length<-`, max(lengths(lst1))))
#     EL SALVADOR HONDURAS NICARAGUA GUATEMALA
#[1,]          18       16         7        17
#[2,]          NA       NA        NA         9

данные

m1 <- structure(c(18, 16, 7, 17, 9), .Dim = c(1L, 5L), .Dimnames = list(
    "TOTAL_CBP", c("EL SALVADOR", "HONDURAS", "NICARAGUA", "GUATEMALA", 
    "GUATEMALA")))
...