R 重命名数据帧中多个特定因子中的级别
我有数据帧R 重命名数据帧中多个特定因子中的级别,r,dataframe,R,Dataframe,我有数据帧DF: DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No", "No")), V2 = factor(c("Yes", "No", "No", "Yes", "No")), Location = factor(c("London", "Paris", "No", "Dallas", "No")), V3 = factor
DF
:
DF <- data.frame(V1 = factor(c("Yes", "No", "Yes", "No", "No")),
V2 = factor(c("Yes", "No", "No", "Yes", "No")),
Location = factor(c("London", "Paris", "No", "Dallas", "No")),
V3 = factor(c("No", "Yes", "No", "No", "No")),
V4 = factor(c("No", "Yes", "No", "No", "No")))
是否有方法根据变量在数据集中的位置(此处为第1:2列和第4:5列)指定重命名适用的变量?也许有人可以建议一个更优雅的解决方案,但是一个有效的解决方案(无需手动更改每个变量)如下所示:
change.vec = c("V1", "V2", "V3", "V4")
for(i in 1:length(change.vec)) {
levels(DF[,change.vec[i]]) = c("X", "Yes")
}
>DF
V1 V2 Location V3 V4
1 Yes Yes London X X
2 X X Paris Yes Yes
3 Yes X No X X
4 X Yes Dallas X X
5 X X No X X
只需指定要对其应用
重估值
功能的列号:
cols_to_update <- c(1:2,4:5)
DF[, cols_to_update] <- lapply(DF[,cols_to_update], function(x) plyr::revalue(x, c("No"="X")))
cols\u to\u update您也可以使用tidyverse方法执行此操作:
库(dplyr)
#>
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#>
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#>
#>相交、setdiff、setequal、并集
图书馆(plyr)
#> -------------------------------------------------------------------------
#>您已在dplyr之后加载plyr-这可能会导致问题。
#>如果您需要plyr和dplyr的功能,请先加载plyr,然后加载dplyr:
#>图书馆(plyr);图书馆(dplyr)
#> -------------------------------------------------------------------------
#>
#>附上包裹:“plyr”
#>以下对象已从“package:dplyr”屏蔽:
#>
#>排列、计数、描述、失效、标识、变异、重命名、总结,
#>总结
测向V1 V2位置V3 V4
#>1是的是的伦敦X X
#>2 X巴黎是的是的
#>3是X否X
#>4 X是达拉斯X X
#>5 X No X
由(v0.2.1)另一个使用dplyrs~fun(.)
作为.funs
参数并结合::fct\u recode:
库(“dplyr”)
图书馆(“forcats”)
(DF%)
在(变量(-Location),~fct_重新编码(,“X”=“No”))处进行变异
#V1 V2位置V3 V4
#1是的是的伦敦X X
#2 X巴黎是的是的
#3是X否X
#4 X是达拉斯X X
#5 X No X
dplyr 1.0的更新:
新的cross()
取代了mutate\u at
等“范围变量”系列。
cross()
可以轻松地对多个列应用相同的转换,允许您在summary()和mutate()中使用select()语义
适用于此处的问题,以下是实现此目的的两种变体:
DF %>%
mutate(across((!Location), ~fct_recode(., "X" = "No")))
DF %>%
mutate(across(c(1:2,4:5), ~fct_recode(., "X" = "No")))
请注意:data.frame
默认情况下会将字符串转换为因子,因此示例中的factor()
部分是多余的。
DF %>%
mutate(across((!Location), ~fct_recode(., "X" = "No")))
DF %>%
mutate(across(c(1:2,4:5), ~fct_recode(., "X" = "No")))