gpt4 book ai didi

r - 如何用 NA 替换整行 data.table?

转载 作者:行者123 更新时间:2023-12-04 16:29:22 24 4
gpt4 key购买 nike

这似乎应该很容易,但我无法弄清楚。

>d=data.table(x=1:5,y=11:15,z=letters[1:5])
>d
x y z
1: 1 11 a
2: 2 12 b
3: 3 13 c
4: 4 14 d
5: 5 15 e

现在,我已经确定第 3 行是坏数据。我希望所有这些都设置为 NA。
d[3,]<-NA

Warning message: In [<-.data.table(*tmp*, 3, , value = NA) : Coerced 'logical' RHS to 'character' to match the column's type. Either change the target column to 'logical' first (by creating a new 'logical' vector length 5 (nrows of entire table) and assign that; i.e. 'replace' column), or coerce RHS to 'character' (e.g. 1L, NA_[real|integer]_, as.*, etc) to make your intent clear and for speed. Or, set the column type correctly up front when you create the table and stick to it, please.



然而,它似乎有效。
> d
x y z
1: 1 11 a
2: 2 12 b
3: NA NA NA
4: 4 14 d
5: 5 15 e

如果我转换为 data.frame,它也可以工作但没有警告。但后来我需要转换回来,这看起来很尴尬。有没有更好的办法?

最佳答案

引用设置。

DT[rownum, (names(DT)) := lapply(.SD, function(x) {  .x <- x[1]; is.na(.x) <- 1L; .x})]

也许
DT[rownum, (names(DT)) := lapply(.SD[1,], function(x) { is.na(x) <- 1L; x})]

这将确保创建正确的 NA 类型(以及因子和日期)

第二种情况只索引一次,如果 DT 中有很多列,这可能会稍微快一点,或者 rownum 创建了一个大的行子组。

你也可以做(罗兰解决方案的一个变体,但没有复制。
DT[rownum, (names(DT)) := .SD[NA]]

关于r - 如何用 NA 替换整行 data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554363/

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