2016-06-14 2 views
0

Я следующий dataframe originalDataкак катить MultiLabel dataframe в одну колонку в R

ID Y1 Y2 Y3 X1  X2  X3 
1 111 TRUE TRUE FALSE 12 junior 45.55 
2 112 FALSE FALSE TRUE 15 junior 458.54 
3 113 TRUE TRUE FALSE 16 senior 48.79 

Я хотел бы получить следующий результат

ID YCOMBIN X1  X2  X3 
1 111  Y1 12 junior 45.55 
2 111  Y2 12 junior 45.55 
3 112  Y3 15 junior 458.54 
4 113  Y1 16 senior 48.79 
5 113  Y2 16 senior 48.79 

Я верю мой пример понятнее чем длинное объяснение. Если это не так. Я хотел бы перевернуть все мои результаты (в моем случае Y1 и Y2) в один столбец YCOMBIN, только если значение adhoc-результата TRUE. При этом я, очевидно, могу повторить идентификатор и все предиктора (X1 и X2), если идентификатор имеет более 1 TRUE значение для результата.

Каков наилучший способ достижения желаемого результата?

Источник данных:

originalData <- structure(list(ID = 111:113, Y1 = c(TRUE, FALSE, TRUE), Y2 = c(TRUE, 
FALSE, TRUE), Y3 = c(FALSE, TRUE, FALSE), X1 = c(12L, 15L, 16L 
), X2 = structure(c(1L, 1L, 2L), .Label = c("junior", "senior" 
), class = "factor"), X3 = c(45.55, 458.54, 48.79)), .Names = c("ID", 
"Y1", "Y2", "Y3", "X1", "X2", "X3"), class = "data.frame", row.names = c(NA, 
-3L)) 

ответ

2

Здесь два варианта.

Использование dplyr и tidyr

library(dplyr) 
library(tidyr) 
originalData %>% 
    gather(key = "YCOMBIN", value = "value", Y1, Y2, Y3) %>% 
    filter(value) %>% 
    select(-value) 

Использование только dplyr

library(dplyr) 
originalData %>% 
    mutate(
    YCOMBIN = ifelse(Y1, "Y1", ifelse(Y2, "Y2", "Y3")) 
) %>% 
    select(-matches("Y[[:digit:]]")) 
+0

Привет спасибо за ответ, я, как первое решение. Но в реальной жизни у меня большие и разные имена. Можно ли использовать что-то вроде gather (key = "YCOMBIN", value = "value", originalData [, 2: 4]). Я попытался, но это не сработало. – S12000

+0

В этом случае вы можете использовать 'gather_'. 'gather_ (key =" YCOMBIN ", value =" value ", names (originalData [, 2: 4])'. – Psidom

+0

спасибо большое, это помогает – S12000

Смежные вопросы