繁体   English   中英

R:使用 quantcut 跨多个变量进行变异

[英]R: Mutate across multiple variables with quantcut

我想使用 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 。错误发生在第一组:year = 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”所以我猜变量类型不同,我会尝试找到一种方法来准确复制我的错误。

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

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))

output:

  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))

output同上。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM