【问题标题】:Automatize as.factor function on some variables via a for loop通过 for 循环在某些变量上自动化 as.factor 函数
【发布时间】:2021-09-02 07:50:07
【问题描述】:

我一直在努力迭代以下变量列表中的 as.factor() 函数。

d$block <- as.factor(d$block)
d$CR <- as.factor(d$CR)
d$T1.ACC <- as.factor(d$T1.ACC)
d$T1.correct <- as.factor(d$T1.correct)
d$T1.response <- as.factor(d$T1.response)

我想知道如何使用 for 循环创建一些代码行以在这样的列表上迭代 as.factor 函数。其实我用了下面的代码

d %>% 
  dplyr::select(
    block, CR, T1.ACC, T1.correct, T1.response) %>% 
  lapply(., as.factor) %>% 
  lapply(., is.factor)

但是当要单独验证变量时,这似乎不起作用。

> is.factor(d$block)
[1] FALSE

哪一个可能是问题?如何编写一个好的 for 循环?谢谢回复

【问题讨论】:

  • 您必须将结果分配回d。实际上,将其分配给d[]。对于为什么需要这样做,我有一个非常奇妙的解释,但是这个评论太短了,无法包含它
  • 在提到 d[] 作业时能不能说得清楚一点?

标签: r for-loop


【解决方案1】:

你可以使用dplyracross函数:

library(dplyr)

d <- d %>%
  mutate(across(c(block, CR, T1.ACC, T1.correct, T1.response), as.factor))

如果你真的想使用for-loop,你可以使用

for (i in c("block", "CR", "T1.ACC", "T1.correct", "T1.response")){
  
  d[, i] <- as.factor(d[, i])
}

【讨论】:

  • 谢谢。这段代码工作得很好。如果可以针对这种情况指示,了解如何编写 for 循环也很有用。
  • 您是通过名称来识别列,还是它们具有共同和独特的特征(例如:它们都是字符向量)或者它们都在第 1 到第 10 列中?
  • 我的数据集中的列由名称标识。它实际上计算了 20 个变量。但我的问题是只在那些选定的变量上使用 for 循环
  • @ag_stat 我添加了for-loop 解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多