[英]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 不能结合year
和country
。错误发生在第一组: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同上。
发生错误是因为year
和country
/地区的值不连续。 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.