簡體   English   中英

將列中的列表提供給 cut2

[英]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 ,每對valuesstrata一次,您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM