gpt4 book ai didi

r - data.table: NA 模糊 unlist 类型

转载 作者:行者123 更新时间:2023-12-02 01:33:27 25 4
gpt4 key购买 nike

我有一个未知列表作为 data.table 中的一列。在下面的例子中,该列是 z 并且它是一个字符列或将是。然而,列表的前两个元素是 NA,这是合乎逻辑的。当我尝试 unlist z 列时,出现以下错误:

Error in `[.data.table`(dat, , .(z = unlist(z)), by = x) : 
Column 1 of result for group 2 is type 'logical' but expecting type 'character'. Column types must be consistent for each group

这是因为我混合了逻辑(NAcharacter)。我可以强制执行如下:dat[, .(y = as.character(unlist(y))), by='x'] 但问题是 z 是未知。我怎样才能使 NA 的存在不以一般化的方式抛出错误?

library(data.table)

dat <- data.frame(
x = 1:3,
stringsAsFactors = FALSE
)

dat[['y']] <- list(1:3, 5:6, 18:19)
dat[['z']] <- list(LETTERS[3:6], NA, LETTERS[13:16])
setDT(dat)

dat[, .(z = unlist(z)), by = x]

最佳答案

我们可以unlist 然后relist 以兼容的格式制作“NA”

dat$z <- relist(unlist(dat$z), skeleton=dat$z)
setDT(dat)
DT <- dat[, .(z = unlist(z)), by = x]
DT$z
#[1] "C" "D" "E" "F" NA "M" "N" "O" "P"
is.na(DT$z)
#[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE

或者另一种选择是通过 'z' 中每个 list 元素的 length 复制 'x' 列,并 unlist ' z'列。

dat[, .(x=rep(x, lengths(z)), z=unlist(z))]

关于r - data.table: NA 模糊 unlist 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32753014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com