【发布时间】:2013-04-24 20:31:32
【问题描述】:
数据来自我正在玩的另一个问题:
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])
这个预期不正确吗?
【问题讨论】:
-
as.data.frame(table(country)) 中的国家是一个因素吗?如果是这样,那是因为两者的级别不同。
-
@mnel,虽然您是对的,因为
as.data.frame将强制转换为factor,但预期的行为将是表示标签的值。我认为这可能与rbindlist的情况相同:stackoverflow.com/questions/15933846/… -
@eddi,请参阅我的答案的更新。
-
@eddi -- 我认为在使用
j时天真地使用j中的因子的问题可能值得一提常见问题解答- 这不是错误。它被记录在案(参见 FAQ 2.3,但它确实需要更多解释0——它也与许多情况下对因子的天真使用一致。 -
@mnel 所以你说我应该不期望上面的
rbind和by为任何blah返回相同的结果,而应该期望他们的平等是blah-dependent?
标签: r data.table