【发布时间】:2020-06-13 15:22:24
【问题描述】:
我有 77 个数值变量,它们在技术上是有序的因子变量。
我知道我可以执行以下操作来将数据框df 的第一列更改为有序因子变量:
df[,1]<-as.ordered(df[,1])
但是有没有一种快速的方法可以将 77 个变量的整个数据框转换为有序因子变量的数据框?
谢谢,
【问题讨论】:
我有 77 个数值变量,它们在技术上是有序的因子变量。
我知道我可以执行以下操作来将数据框df 的第一列更改为有序因子变量:
df[,1]<-as.ordered(df[,1])
但是有没有一种快速的方法可以将 77 个变量的整个数据框转换为有序因子变量的数据框?
谢谢,
【问题讨论】:
我们可以使用lapply 遍历数据集列,应用该函数并将其分配回原始数据集
df[] <- lapply(df, as.ordered)
或dplyr
library(dplyr)
df <- df %>%
mutate_all(as.ordered)
【讨论】:
对于这种情况,for 循环足够好且足够快。
for (i in 1:ncol(df)) df[, i] <- as.factor(df[, i])
(很可能 - 根据我的经验 - 比任何 lapply 或任何 apply-family 解决方案都快 - 因为避免在 R 中构建非常慢的列表。)
对于1:ncol(df),您也可以使用seq_along(df)。
【讨论】: