使用 r 中的 for 循环重新调整具有给定不同引用级别的许多变量

标签 r for-loop levels

我需要更改 a、b、d 和 e 变量的引用级别。变量 a 的引用水平应为 3,变量 b、d 和 e 的引用水平应为 2。这可以单独完成。但想要立即执行还是使用for循环。以下是我编写的代码。但是,显示错误消息“仅针对(无序)因子‘重新调整’”。

tr <- data.frame(a = c(3, 2, 3, 3, 1), b = c(4, 3, 2, 2, 1), c = c(1, 2, 3, 2, 1),
                 d = c(1, 3, 1, 2, 2), e = c(1, 2, 0, 1, 2))

#convert to factor type
tr <- tr %>% mutate_if(is.numeric, as.factor)

# Relevel factors
col_set <- list(1, c(2, 4, 5))  # column index to relevel
r <- c("3", "2")      # referencing level

for (i in seq_along(col_set)){
  tr[col_set[[i]]] <- relevel(tr[col_set[[i]]], r[i])
}

**Error in relevel.default(tr[col_set[[i]]], r[i]) : 
  'relevel' only for (unordered) factors**

最佳答案

您可以使用 Map 在特定列上使用 relevel,而不是 for 循环。

tr[unlist(col_set)] <- Map(relevel, tr[unlist(col_set)], rep(r, lengths(col_set)))
str(tr)
#'data.frame':   5 obs. of  5 variables:
# $ a: Factor w/ 3 levels "3","1","2": 1 3 1 1 2
# $ b: Factor w/ 4 levels "2","1","3","4": 4 3 1 1 2
# $ c: Factor w/ 3 levels "1","2","3": 1 2 3 2 1
# $ d: Factor w/ 3 levels "2","1","3": 2 3 2 1 1
# $ e: Factor w/ 3 levels "2","0","1": 3 1 2 3 1

关于使用 r 中的 for 循环重新调整具有给定不同引用级别的许多变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62388635/

相关文章:

r - 按组划分的因素水平

ios - cocos2d - NSMutableArray 具有级别,重新启动级别和崩溃,下一个级别工作良好

r - 级别函数返回NULL

R 工作流 : How to handle hand-cleaning data

regex - 如何在R中精确匹配正则表达式并提取模式

r - 在 R 中绘制网络时如何创建边缘颜色图例?

arrays - 如何在 Swift 中将字符串/数组中的所有其他字母大写?

r - 使用 := that performs calculations across factor levels by group 创建新列

Android ArrayList 的 int

C++ 和文件输出