【问题标题】:inputting list elements to a mutate loop in R?将列表元素输入到R中的变异循环?
【发布时间】:2019-03-22 18:53:37
【问题描述】:

我有一个非常混乱的数据集需要预处理。 我想更改所有变量并手动添加级别信息,因此我试图创建一个使用 mutate 的循环。

我设法创建了一个列表,其中包含我需要在数据框中更改的变量的行号(例如 varstochange)。我还生成了两个列表,第一个具有此变量具有的级别(请参阅 levelnumbers),第二个具有要使用的标签(请参阅 levelnames)。

我对循环很陌生,使用 magittr 的写作方式使用 mutates 变得很困难

 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")

我试图写这样的东西,但真的不知道从哪里开始以及如何告诉函数从三个独立列表中选择元素并将其输入到 mutate 循环中......

这就是我卡住的地方。

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

如果能帮我完成这项工作,我将不胜感激 谢谢!

【问题讨论】:

  • 您需要重新编码多少列?您是只有几列的多个级别,还是也有很多列?
  • 如果有很多列,你能假设tempdatlevel 列表的顺序正确吗?

标签: r loops dplyr levels


【解决方案1】:

一般来说,您不应该也不需要像这样循环使用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 package (v0.2.1) 于 2019-03-22 创建

【讨论】:

  • 感谢您的帮助 Calum,不过,我不想使用与您上面建议的代码类似的代码的原因是因为我有一个包含 722 个级别和标签的列表!!!按照您上面的建议手动完成需要很长时间,并且可能会导致很多错误。您有什么建议可以将列表中的级别和标签列表直接输入到数据框中?
  • 啊,不清楚您是否有预先确定的清单。我认为,如果您将级别输入到列表中,只需将它们作为函数的参数。我将提交另一个答案
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2019-04-08
  • 2020-08-12
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多