gpt4 book ai didi

r - data.table 和 table 意外行为

转载 作者:行者123 更新时间:2023-12-04 10:40:06 27 4
gpt4 key购买 nike

数据来自我在玩的另一个问题:

dt <- data.table(user=c(rep(3, 5), rep(4, 5)),
country=c(rep(1,4),rep(2,6)),
event=1:10, key="user")
# user country event
#1: 3 1 1
#2: 3 1 2
#3: 3 1 3
#4: 3 1 4
#5: 3 2 5
#6: 4 2 6
#7: 4 2 7
#8: 4 2 8
#9: 4 2 9
#10: 4 2 10

这是令人惊讶的行为:
dt[user == 3, as.data.frame(table(country))]
# country Freq
#1 1 4
#2 2 1

dt[user == 4, as.data.frame(table(country))]
# country Freq
#1 2 5

dt[, as.data.frame(table(country)), by = user]
# user country Freq
#1: 3 1 4
#2: 3 2 1
#3: 4 1 5
# ^^^ - why is this 1 instead of 2?!

谢谢 mnel 和 Victor K。自然的后续是 - 不应该是 2,即这是一个错误吗?我期望
dt[, blah, by = user]

返回相同的结果
rbind(dt[user == 3, blah], dt[user == 4, blah])

这种期望是错误的吗?

最佳答案

惯用的 data.table 方法是使用 .N

 dt[ , .N, by = list(user, country)]

这会快得多,而且它也将国家保留为与原始类别相同的类别。

关于r - data.table 和 table 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201596/

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