Arhn - архитектура программирования

Как опустить значения NA при вставке нескольких значений столбца вместе?

У меня есть фрейм данных dd2 с сотнями столбцов, и мне нужно вставить все значения этих столбцов вместе, опуская любые значения NA. Если я сделаю что-то вроде этого

apply(dd2, 1, paste, collapse=",")

на самом деле он включает NAs как строку "NA". Я хочу избежать этого. Я также мог бы сделать так, как показано ниже, но это предполагает, что я буду работать с каждым отдельным столбцом за раз, чтобы получить результат.

result <- cbind(    
    dd2, 
    combination = paste(dd2[,2], replace(dd2[,3], is.na(dd2[,3]), ""), sep = ",")
)

Есть ли какой-нибудь эффективный способ сделать это? Вот пример данных:

dd2 <- structure(c("A", "B", "C", "D", "E", "AK2", "HFM1", NA, "TRR", 
"RTT", NA, "PPT", "TRR", "RTT", NA, "PPT", NA, NA, "GGT", NA), .Dim = c(5L, 
4L), .Dimnames = list(NULL, c("sample_id", "plant", "animal", 
"more")))
r na
23.12.2015

  • Данные вашего образца не являются data.frame. С dd2 вы просто пытаетесь склеить все столбцы, кроме первого? 23.12.2015
  • @AnandaMahto Я хочу вставить значения выбранных столбцов вместе, исключая какие-либо NA. Например, я хочу вставить dd2[,wanted.columns] . 23.12.2015
  • Возможно, что-то вроде этого тоже сработает: melt(as.data.table(dd2), measure.vars = c("plant", "animal"), na.rm = TRUE)[, toString(value), by = .(sample_id, more)]. 23.12.2015

Ответы:


1

Вы можете попробовать na.omit() опустить значения, а затем вставить. Кроме того, вы можете использовать toString(), так как это эквивалентно paste(..., collapse = ", ").

apply(dd2, 1, function(x) toString(na.omit(x)))
# [1] "A, AK2, PPT"      "B, HFM1, PPT"     "C, TRR"          
# [4] "D, TRR, RTT, GGT" "E, RTT"   

Если у вас есть определенные столбцы, которые вы используете, то

apply(dd2[, cols], 1, function(x) toString(na.omit(x)))
23.12.2015
  • Есть ли способ указать другой разделитель? (например, вместо ,)? 12.06.2018
  • @godines - не в toString. Вам придется использовать paste. 13.06.2018
  • Спасибо @RichScriven. Проблема с paste заключается в NA ячейках. Я мог бы использовать и na.omit, но тогда возникают проблемы с разным количеством строк. У него должна быть возможность просто игнорировать NA ячейки. 14.06.2018
  • stringr::str_replace_na(c(NA, "abc", "def"), replacement=''). Как правило, обратитесь к stringr для чего-либо более сложного, чем простые конкатенации. 21.11.2018
  • @Ufos - Хорошо, но это еще не все. stringr::str_replace_na(dd2, replacement='') не дает желаемого результата. replace в Base R можно было использовать для того же самого. 21.11.2018

  • 2

    dd2 - это матрица, и в этом случае использование apply, предложенное @Rich Scriven, является более подходящим. Если это кадр данных, вы можете использовать tidyr::unite

    dd2 <- data.frame(dd2)
    tidyr::unite(dd2, result, plant, animal, more, na.rm = TRUE, sep = ',')
    
    #  sample_id      result
    #1         A     AK2,PPT
    #2         B    HFM1,PPT
    #3         C         TRR
    #4         D TRR,RTT,GGT
    #5         E         RTT
    

    Чтобы объединить все столбцы, вы можете использовать everything().

    tidyr::unite(dd2, result, dplyr::everything(), na.rm = TRUE, sep = ',')
    
    #         result
    #1     A,AK2,PPT
    #2    B,HFM1,PPT
    #3         C,TRR
    #4 D,TRR,RTT,GGT
    #5         E,RTT
    
    28.01.2021
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..