【发布时间】:2016-05-21 10:27:47
【问题描述】:
在我的data.table 中,如果每个by 组中有多个条目,我想计算条目:
dt1 <- data.table(col1=1:4, col2 = c('A', 'B', 'B', 'C'))
# col1 col2
# 1: 1 A
# 2: 2 B
# 3: 3 B
# 4: 4 C
dt1[, col3:={
if (.N>1) {paste0((1:.N), "_", col2)} else {col2};
}, by=col2]
# col1 col2 col3
# 1: 1 A A
# 2: 2 B 1_B
# 3: 3 B 2_B
# 4: 4 C C
这很好用,但是当我尝试改用 ifelse() 时却没有用:
dt1[, col4:=ifelse (.N>1, paste0((1:.N), "_", col2), col2), by=col2]
# col1 col2 col3 col4
# 1: 1 A A A
# 2: 2 B 1_B 1_B
# 3: 3 B 2_B 1_B
# 4: 4 C C C
谁能解释一下原因?
【问题讨论】:
-
ifelse为每个测试返回一个值。你想要不止一个。它只返回1_B,因为它是内置的。 -
@PierreLafortune,谢谢,这似乎确实是该问题的副本。我只是期望“一个值”也可以是一个向量值。目前的行为对我来说看起来相当不直观,但没关系
标签: r data.table