我想使用 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。錯誤發生在第一組:年份 = 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 非數字引數到二元運算子”所以我猜變數型別是不同的,我會嘗試找到一種方法來完全復制我的錯誤。
uj5u.com熱心網友回復:
也許這就是你所追求的?:
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))
輸出與上面相同。
uj5u.com熱心網友回復:
因為價值觀出現的錯誤year和country不連續的。包檔案明確指出x必須是“連續變數”。有關更多資訊,請使用?quantcut或訪問:https : //www.rdocumentation.org/packages/gtools/versions/3.9.2/topics/quantcut
您可以year通過使用 將其轉換為整數來解決這個問題as.integer()。country但是不能在不丟失資訊的情況下轉換為 continue 變數。quantcut()也不適用于因子。country如果這是一種選擇,您可以嘗試不考慮突變嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385820.html
