ввод элементов списка в цикл мутирования в R? - PullRequest
0 голосов
/ 22 марта 2019

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

Мне удалось создать список, в котором есть номера строк переменных, которые нужно изменить в кадре данных (например, .varstochange).Я также сгенерировал два списка: первый имеет уровни, которые имеют эти переменные (см. Номера уровней), а второй имеет метки для использования (см. Имена уровней).

Я очень новичок в циклах, и использование мутаций становится затруднительным из-за способа записи magittr

 tempdat<- data.frame(location=c("1","2","3","1","2","3","1","2","1"),job=c(1,0 ,1,0,1,0,1,0,1),age=c(12,12,13,14,15,13,1,14,14))

varstochange<-c(1,2)

levelnames<-list()
levelnames[[1]]=c("Europe","Africa","Asia")
levelnames[[2]]=c("yes","no")

levelnumbers<-list()
levelnumbers[[1]]=c("1","2","3")
levelnumbers[[2]]=c("0","1")

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

Вот где я застрял.

  for (i in 1:length(varstochange)){
  input<-tempdat%>%
 mutate(varstochange[i]=factor(tempdat[i],levels=c(unlist(levelnumbers[i])),l abels=c(unlist(levels_names[i])),order=TRUE))
   }  

В конце я быхотелось бы иметь набор данных, который только изменяет формат переменных на те, что указаны в «varstochange», и который имеет структуру с уровнями, определенными в двух других списках.

Буду признателен за любую помощь в создании этой работы, спасибо!

1 Ответ

1 голос
/ 22 марта 2019

В общем, вы не должны и не должны делать циклы с dplyr подобным образом. Попробуйте просто использовать recode вот так:

library(tidyverse)
tempdat <- tibble(
  location = c("1", "2", "3", "1", "2", "3", "1", "2", "1"),
  job = c(1, 0, 1, 0, 1, 0, 1, 0, 1),
  age = c(12, 12, 13, 14, 15, 13, 1, 14, 14)
)
tempdat %>%
  mutate(
    location = recode(location, "1" = "Europe", "2" = "Africa", "3" = "Asia"),
    job = recode(job, "1" = "yes", "0" = "no")
  )
#> # A tibble: 9 x 3
#>   location job     age
#>   <chr>    <chr> <dbl>
#> 1 Europe   yes      12
#> 2 Africa   no       12
#> 3 Asia     yes      13
#> 4 Europe   no       14
#> 5 Africa   yes      15
#> 6 Asia     no       13
#> 7 Europe   yes       1
#> 8 Africa   no       14
#> 9 Europe   yes      14

Создано в 2019-03-22 пакетом Представления (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...