gpt4 book ai didi

R - 替换数据表中的缺失值

转载 作者:行者123 更新时间:2023-12-02 08:33:04 24 4
gpt4 key购买 nike

我有一个像下面的 dt 这样的数据表。它大部分是完整的,但有一些缺失值,我正在尝试以合理的方式进行填充。

set.seed(2015)
require(data.table)
dt<-data.table(id=1:10, x=sample(letters[1:3],10,replace=TRUE), y=sample(letters[4:6],10,replace=TRUE), key="id")
dt[sample(10,3), y:=""]
dt
id x y
1: 1 a f
2: 2 c
3: 3 a d
4: 4 a
5: 5 a f
6: 6 b f
7: 7 b
8: 8 a d
9: 9 b f
10: 10 b e

对于每个缺失的 y,我想将 y 值设置为其在 x 中最常见(非空白)的 y 值。在平局的情况下,随机选择 y 个并列的获胜者。如果不存在获胜者,请将 y 留空。在此示例中,我的数据表应转换为

    id x y
1: 1 a f
2: 2 c
3: 3 a d
4: 4 a d
5: 5 a f
6: 6 b f
7: 7 b f
8: 8 a d
9: 9 b f
10: 10 b e

    id x y
1: 1 a f
2: 2 c
3: 3 a d
4: 4 a f
5: 5 a f
6: 6 b f
7: 7 b f
8: 8 a d
9: 9 b f
10: 10 b e

(第4行的y值可能变成d或f)

无法想出一个有效的方法来做到这一点。

最佳答案

对于 x 中的每个值,我首先获取相应的条目来替换 y,如下所示:

idt = dt[, .N, by="x,y"][, list(y=sample(y[N %in% max(N)], 1L)), by=x]
# x y
# 1: a d
# 2: c
# 3: b f

然后使用二进制子集为 idt 上的每个 x 替换丢失的 y 通过引用,如下所示:

setkey(idt, x)
dt[y == "", y := idt[x]$y]
# id x y
# 1: 1 a f
# 2: 2 c
# 3: 3 a d
# 4: 4 a d
# 5: 5 a f
# 6: 6 b f
# 7: 7 b f
# 8: 8 a d
# 9: 9 b f
# 10: 10 b e

关于R - 替换数据表中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24793035/

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