R中的多元函数

mzaanser  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(74)

我想在R中取消几个因子变量的类。我需要对很多变量使用这个功能。现在我对每个变量重复代码,这并不方便:

unclass:
  myd$ati_1 <-unclass(myd$ati_1) 
  myd$ati_2 <-unclass(myd$ati_2)  
  myd$ati_3 <-unclass(myd$ati_3) 
  myd$ati_4 <-unclass(myd$ati_4)

我已经研究了apply()函数族,但我甚至不知道这是否是正确的方法。我也读过for循环,但每个例子都只涉及简单的整数,而不是当你需要循环多个变量时。
如果有人能帮我我会很高兴的。

zdwk9cvp

zdwk9cvp1#

您可以使用循环:

block <- c("ati_1", "ati_2", "ati_3", "ati_4")
    for (j in block) {myd[[j]] <- unclass(myd[[j]])}
# The double brackets allows you to specify actual names to extrapolate within the data frame
jq6vz3qz

jq6vz3qz2#

这里有几种方法,我们使用CO2,它带有R,并且有几个因子列,这会取消这些列的类。
如果你需要其他的标准

  • 将ix设置为名称或位置或定义要在基础R解决方案中变换的那些列的逻辑向量
  • 将折叠解决方案中的is.factor替换为名称或位置的向量,或者表示要转换的列的逻辑向量
  • 在dplyr解决方案中,将where(...)替换为相同的名称、位置或逻辑。

代码如下所示。在所有这些代码中,输入都不会被覆盖,所以如果你想从头开始重新运行它,你仍然可以使用未更改的输入,通常,覆盖对象是容易出错的。

# Base R
ix <- sapply(CO2, is.factor)
replace(CO2, ix, lapply(CO2[ix], unclass))

# collapse
library(collapse)
ftransformv(CO2, is.factor, unclass)

# dplyr
library(dplyr)
CO2 %>%
  mutate(across(where(is.factor), unclass))

根据您的需要,这可能就足够了,或者如果矩阵结果可以的话,可以省略as.data.frame。

as.data.frame(data.matrix(CO2))

相关问题