无法创建 for 循环以将多个变量转换为 as.factor
Unable to create a for loop to convert multiple varialbe into as.factor
我正在尝试在 r 中编写一个 for 循环,以将 r 中具有相似字符模式的多个变量转换为 as.factor
。
下面是我写的函数,R运行代码,没有显示任何错误,但是没有给出想要的输出。有逻辑错误,谁能帮我改正这个错误?
for (i in grep(pattern = "hml35_", x=tanre))
{
tanre$i<-as.factor(tanre$i)
}
假设 grep
模式 returns 列名,您需要更改语法:
for (i in grep(pattern = "hml35_", x=tanre))
{
tanre[[i]]<-as.factor(tanre[[i]])
}
当您使用 $
运算符时,R 需要文字列名称。
编辑:您可以在此处使用 lapply
而不是循环。我也会看看使用 mutate across.
编辑 2:
根据要求,您可以通过以下方式做到这一点 lapply
:
# Create some data
tanre <- data.frame(
id = c(1:12),
hml35_a = rep(c("a", "b", "c"), 4),
hml35_b = rep(c("a", "b", "c"), 4)
)
sapply(tanre, class)
# id hml35_a hml35_b
# "integer" "character" "character"
# Make factor
tanre[grep("hml35_", names(tanre))] <- lapply(tanre[grep("hml35_", names(tanre))], as.factor)
sapply(tanre, class)
# id hml35_a hml35_b
# "integer" "factor" "factor"
tidyverse 的解决方案
library(tidyverse)
tanre %>%
mutate_at(vars(contains("hml35_")), as.factor)
我正在尝试在 r 中编写一个 for 循环,以将 r 中具有相似字符模式的多个变量转换为 as.factor
。
下面是我写的函数,R运行代码,没有显示任何错误,但是没有给出想要的输出。有逻辑错误,谁能帮我改正这个错误?
for (i in grep(pattern = "hml35_", x=tanre))
{
tanre$i<-as.factor(tanre$i)
}
假设 grep
模式 returns 列名,您需要更改语法:
for (i in grep(pattern = "hml35_", x=tanre))
{
tanre[[i]]<-as.factor(tanre[[i]])
}
当您使用 $
运算符时,R 需要文字列名称。
编辑:您可以在此处使用 lapply
而不是循环。我也会看看使用 mutate across.
编辑 2:
根据要求,您可以通过以下方式做到这一点 lapply
:
# Create some data
tanre <- data.frame(
id = c(1:12),
hml35_a = rep(c("a", "b", "c"), 4),
hml35_b = rep(c("a", "b", "c"), 4)
)
sapply(tanre, class)
# id hml35_a hml35_b
# "integer" "character" "character"
# Make factor
tanre[grep("hml35_", names(tanre))] <- lapply(tanre[grep("hml35_", names(tanre))], as.factor)
sapply(tanre, class)
# id hml35_a hml35_b
# "integer" "factor" "factor"
tidyverse 的解决方案
library(tidyverse)
tanre %>%
mutate_at(vars(contains("hml35_")), as.factor)