1

我想使用 quantcut 将多个变量转换为离散形式。

library(gtools)
library(dplyr)

quantcut(df$var3, q=4, na.rm = TRUE) 

作品。

现在我想将此公式应用于多个变量。我所拥有的是这样的:

var_col <- c(var3, var4, var5, var6) 
df <- df %>% 
     mutate(across(all_of(var_col), quantcut(., q=4, na.rm = TRUE, .names = "cut_{col}"))

这给我带来了错误:“x 不能组合yearcountry。错误发生在第一组:年 = 1800。

数据集如下所示:

country <- c("GER", "ITA", "FRA") 
year <- c("1800", "1801", "1802") 
var3 <- c(1L, 2L, 3L) 
var4 <- c(3L, 4L, 5L) 
var5 <- c(6L, 7L, NA) 
var6 <- c(8L, 9L, 10) 
df <- data.frame(country, year, var3, var4, var5, var6) 

虽然我应该说,我尝试使用 reprex 时遇到了一个不同的错误:“x non-numeric argument to binary operator”所以我猜变量类型不同,我会尝试找到一种方法来准确复制我的错误。

4

2 回答 2

2

也许这就是你所追求的?:

library(dplyr)

country <- c("GER", "ITA", "FRA") 
year <- c("1800", "1801", "1802") 
var3 <- c(1L, 2L, 3L) 
var4 <- c(3L, 4L, 5L) 
var5 <- c(6L, 7L, NA) 
var6 <- c(8L, 9L, 10) 
df <- data.frame(country, year, var3, var4, var5, var6) 

your_func <- function(x){
  gtools::quantcut(x, q=4, na.rm = TRUE)
}

df %>% 
  mutate(across(where(is.numeric), your_func))

输出:

  country year    var3    var4     var5     var6
1     GER 1800 [1,1.5] [3,3.5] [6,6.25]  [8,8.5]
2     ITA 1801 (1.5,2] (3.5,4] (6.75,7]  (8.5,9]
3     FRA 1802 (2.5,3] (4.5,5]     <NA> (9.5,10]

编辑

如果需要指定哪些列:

var_col <- c("var3", "var4", "var5", "var6") 

df %>% 
  mutate(across(var_col, your_func))

输出与上面相同。

于 2021-12-17T12:36:28.247 回答
0

发生错误是因为 和 的值yearcountry连续。包文档明确指出x必须是“连续变量”。欲了解更多信息,请使用?quantcut或访问:https ://www.rdocumentation.org/packages/gtools/versions/3.9.2/topics/quantcut

year您通过使用将其转换为整数来冷解决此问题as.integer()country但是不能在不丢失信息的情况下转换为连续变量。quantcut()也不适用于因子。如果可以选择,您可以尝试忽略country突变吗?

于 2021-12-17T10:14:06.093 回答