r - 将列表元素输入到R中的变异循环?
问题描述
我有一个非常混乱的数据集需要预处理。我想更改所有变量并手动添加级别信息,所以我试图创建一个使用 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”上的格式,并且具有在其他两个列表中定义的级别的结构。
我将不胜感激任何帮助完成这项工作谢谢!
解决方案
一般来说,你不应该也不需要这样循环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 年 3 月 22 日创建
推荐阅读
- database - 如何使用离线/缓存数据库并与在线服务器同步
- c# - 在 C# 中使用 Foreach 循环遍历文件并在 .pdf 之前删除一个破折号和三个额外字符
- php - PHP 从 foreach 循环中检索数组值并将单个值传递给函数
- python - 神经网络(操作数不能与形状一起广播 (1,713) (713,18) )
- powershell - 如何使用脚本将文件上传到远程服务器
- python - 项目分配 Tensorflow 2.0 - TypeError:“tensorflow.python.framework.ops.EagerTensor”对象不支持项目分配
- python - 如何修复 ImportError:无法从“django.http”导入名称“HTTpResponse”
- javascript - 为什么 Electron App 不在 Windows 中加载 VueJS?
- mongoose - 我想做猫鼬如下
- verilog - 如何使用 6 个开关作为位在两个 7 段显示器上显示十进制等效值(0-63)?