将列表元素输入到R中的突变循环



我有一个非常混乱的数据集,需要预处理。我想更改所有变量并手动添加级别信息,以便我尝试制作一个使用突变的循环。

我设法创建了一个列表,该列表具有我需要在数据框架(例如varstochange)中更改的变量的行号。我还生成了两个列表,第一个列表具有该变量具有的级别(请参见LevelNumbers),第二个变量具有可使用的标签(请参见LevelNames)。

我是循环的新手,使用突变的写作方式变得越来越困难

 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"上的数据集,并且具有在其他两个列表中定义的级别的结构。

我很高兴为这项工作提供任何帮助谢谢!

通常,您不应该也不需要像这样的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

由Reprex软件包(v0.2.1)在2019-03-22创建

最新更新