2016-03-13 2 views
1

У меня есть образец данных, который выглядит какдолго широко в R удаления NA-х

Dput:

structure(list(variable = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L), .Label = c("firstname", "lastname", "title"), class = "factor"), 
    value = structure(c(6L, 2L, 5L, 1L, 3L, 5L, 7L, 8L, 4L), .Label = c("adam", 
    "dingler", "jhon", "miss", "mr", "naji", "stephanie", "williams" 
    ), class = "factor")), .Names = c("variable", "value"), class = "data.frame", row.names = c(NA, 
-9L)) 

Я хочу, чтобы преобразовать это в широком формате, так что он выглядит следующим образом:

enter image description here

Я попытался

library(tidyr) final_data <- spread(sample, key = variable, value = value) , но я получаю выход не в нужном формате, я получаю выход в следующем формате:

enter image description here

мне нужна помощь, как можно избавиться от НС и реструктурировать вывод в нужном формате.

+0

ли они всегда приходят в тройках в первоначальном списке? –

+1

'matrix (sample $ value, 3, byrow = TRUE)' – rawr

+0

Эй, я никогда не думал об этом, благодаря этому интуитивно понятному решению. – PSraj

ответ

2

Нам нужно создать последовательность переменной

library(dplyr) 
library(tidyr) 
sample %>% 
    group_by(variable) %>% 
    mutate(n = row_number()) %>% 
    spread(variable, value) %>% 
    select(-n) 
# firstname lastname title 
#  (fctr) (fctr) (fctr) 
#1  naji dingler  mr 
#2  adam  jhon  mr 
#3 stephanie williams miss 
0

Вы можете сделать следующее:

data <- structure(list(variable = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
             1L, 2L, 3L), .Label = c("firstname", "lastname", "title"), class = "factor"), 
       value = structure(c(6L, 2L, 5L, 1L, 3L, 5L, 7L, 8L, 4L), .Label = c("adam", 
                        "dingler", "jhon", "miss", "mr", "naji", "stephanie", "williams" 
       ), class = "factor")), .Names = c("variable", "value"), class = "data.frame", row.names = c(NA, 


firstname <- data$value[which(data$variable == "firstname")] 
lastname <- data$value[which(data$variable == "lastname")] 
title <- data$value[which(data$variable == "title")] 

data_new <- data.frame(firstname, lastname, title) 
data_new 
Смежные вопросы