Создайте переменную со значением, основываясь на том, что другие переменные являются NA или нет - PullRequest
0 голосов
/ 25 января 2019

Прежде всего, если на этот пост уже есть ответ, прошу прощения.Я не смог найти его.Я уверен, что это не должно быть так сложно сделать, но я просто не вижу этого.

У меня есть такой фрейм данных:

structure(list(X1 = c(0.3, 0.2, 0.3, 0.2, NA, NA, NA, NA), X2 = c(0.2, 
0.2, NA, NA, 0.2, 0.2, NA, NA), X3 = c(5.1, NA, 2.8, NA, 1.4, 
NA, 0.5, NA)), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), class = "data.frame")

Я хочу создать 4-й столбец,Variables, которая содержит строку с именами столбцов, которые не являются NA.Смотрите мой желаемый результат ниже.

   X1  X2  X3  Variables
1 0.3 0.2 5.1  X1,X2,X3
2 0.2 0.2  NA  X1,X2
3 0.3  NA 2.8  X1,X3
4 0.2  NA  NA  X1
5  NA 0.2 1.4  X2,X3
6  NA 0.2  NA  X2
7  NA  NA 0.5  X3
8  NA  NA  NA  None

1 Ответ

0 голосов
/ 25 января 2019

Можно использовать apply с MARGIN=1 для циклического перемещения по строкам, удалить NA elementgs с na.omit, получить names и paste вместе (toString)

df1$Variables <- apply(df1, 1, function(x) toString(names(na.omit(x))))
is.na(df1$Variables) <- df1$Variable == ""

Может быть лучше иметь NA для строк, которые имеют все NA s


Аналогичная реализация с tidyverse будет использовать pmap

library(tidyverse)
df1 %>%
     mutate(Variables = pmap(., ~ c(...) %>% 
                                   na.omit %>%
                                   names %>% 
                                   toString))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...