[英]Feeding a list within a column to cut2
我有如下數據,在strata
列中有列表:
library(data.table)
library(Hmisc)
dat <- structure(list(values = c(25, 11, 21, 15), strata = list(c(10, 20, 30, 40), c(10, 20, 30), c(10, 20), c(10, 30))), row.names = c(NA,
-2L), class = c("data.table", "data.frame"))
values strata
1: 25 10,20,30,40
2: 31 10,20,30
3: 45 10,20
4: 62 10,30
我想使用strata
列中的列表作為cut2
的截止值。 我試過了:
dat <- setDT(dat)[, cat:= cut2(values, strata, oneval=FALSE)]
但這給出了:
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) :
'x' must be atomic
我該如何處理?
所需的 output:
values strata cat
1: 25 10,20,30,40 [20,30)
2: 11 10,20,30 [10,20)
3: 21 10,20 [20,)
4: 15 10,30 [10,30)
由於您需要迭代調用cut2
,每對values
和strata
一次,您可以使用mapply
:
setDT(dat)
dat[, cat := mapply(Hmisc::cut2, values, strata)]
dat
# values strata cat
# <num> <list> <fctr>
# 1: 25 10,20,30,40 [20,30)
# 2: 11 10,20,30 [10,20)
# 3: 21 10,20 [20,21]
# 4: 15 10,30 [10,30]
我無法復制所需的[20,)
,也許我在 function 本身中遺漏了一些東西。 無論哪種方式,我認為這就是您需要的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.