2015-05-04 2 views
1

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

Два вопроса: 1) как я могу перебирать столбцы в фрейме данных, содержащем метки над импортированным набором данных, используя dplyr?

u<-which(sapply(i,function(x) !is.null(attr(x,"labels")))) 
n<-mutate_each(i,(as_factor),... = u) 

2) как установить правильную дату после импорта .sav-файла из SPSS. i$e3 - это дата, но я не знаю, как я могу преобразовать ее в правильный r-lingo.

Dataset:

> dput(i) 
structure(list(e = structure(c(1, 1, 2, 2, 1), label = "Sex", class = c("labelled", 
"numeric"), labels = structure(c(1, 2), .Names = c("Male", "Female" 
))), e2 = structure(c(3, 3, 3, 3, 3), label = "The time from injury to surgery", class = c("labelled", 
"numeric"), labels = structure(c(1, 2, 3), .Names = c("< 12 hours", 
"12 to 24 hours", "> 24 hours"))), e3 = structure(c(13254624000, 
13431139200, 13437360000, 13493174400, 13233369600), label = "Surgery Date")), .Names = c("e", 
"e2", "e3"), row.names = c(NA, -5L), class = "data.frame") 
+1

'i' очень запутанным имя для набора данных, так как она, как правило, зарезервированы для итераторов или индексов. Вероятно, вы должны разделить свои вопросы на две части, поскольку они кажутся очень несвязанными. Кроме того, вам не нужно (возможно, не должно быть) "[r]" в заголовке. – Frank

+0

Думаю, вам нужно 'mutate_each_'. Попробуйте 'mutate_each_ (i, funs (as_factor), names (u))' – aosmith

+0

Он по-прежнему бросает ту же ошибку ... – Misha

ответ

1

Я не уверен, как настроить даты должным образом (вы можете изменить / 10 к / 100 или 1000). Вы можете сделать это с основанием г:

i <- structure(list(e = structure(c(1, 1, 2, 2, 1), label = "Sex", class = c("labelled", 
                     "numeric"), labels = structure(c(1, 2), .Names = c("Male", "Female" 
                     ))), e2 = structure(c(3, 3, 3, 3, 3), label = "The time from injury to surgery", class = c("labelled", 
                                            "numeric"), labels = structure(c(1, 2, 3), .Names = c("< 12 hours", 
                                                         "12 to 24 hours", "> 24 hours"))), e3 = structure(c(13254624000, 
                                                                      13431139200, 13437360000, 13493174400, 13233369600), label = "Surgery Date")), .Names = c("e", 
                                                                                             "e2", "e3"), row.names = c(NA, -5L), class = "data.frame") 




i$e3 <- as.POSIXct(i$e3/10, origin = '1970-01-01') 

# e e2     e3 
# 1 1 3 2012-01-01 19:00:00 
# 2 1 3 2012-07-24 03:12:00 
# 3 2 3 2012-07-31 08:00:00 
# 4 2 3 2012-10-03 22:24:00 
# 5 1 3 2011-12-08 04:36:00 

i <- setNames(i, sapply(i, function(x) attr(x, 'label'))) 
i[] <- lapply(i, function(x) { 
    if (!is.null(lab <- attr(x, 'labels'))) 
    names(lab[x]) 
    else x 
}) 

#  Sex The time from injury to surgery  Surgery Date 
# 1 Male      > 24 hours 2012-01-01 19:00:00 
# 2 Male      > 24 hours 2012-07-24 03:12:00 
# 3 Female      > 24 hours 2012-07-31 08:00:00 
# 4 Female      > 24 hours 2012-10-03 22:24:00 
# 5 Male      > 24 hours 2011-12-08 04:36:00 
+0

Thx-Тем не менее, я не понимаю, почему версия dplyr не работает. Более того, если я пытаюсь group_by, я получаю ошибку из-за «неподдерживаемого типа: помечено». На данный момент кажется, что dplyr и haven не очень хорошо интегрированы. – Misha

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