无法操纵data.table中的列

时间:2014-03-17 19:17:20

标签: r data.table

我有一个数据表:

(f <- data.table(id1=c(1,2,3,1,2,3),
                 v=c(1,NA,NA,2,3,4),
                 key="id1"))
  id1  v
1:   1  1
2:   1  2
3:   2 NA
4:   2  3
5:   3 NA
6:   3  4

当我尝试从组中的当前值设置缺少v时:

> f[,v[is.na(v)] := v[which(!is.na(v))[1]], by="id1"]
Error in eval(expr, envir, enclos) : object 'v' not found
Calls: [ -> [.data.table -> eval -> eval

显然,我错过了很简单的事情......

1 个答案:

答案 0 :(得分:3)

这是一个解决方案:

f[, v:={
  ok <- !is.na(v)
  ifelse(ok,v,v[ok][1])
}, by=id1]

请注意,如果v对于一个群组完全NA,则会保持这种状态:

f  <- data.table(id1=c(1,2,3,1,2,3),v=c(1,NA,NA,2,3,4),key="id1")
ff <- rbind(f,list(4L,NA),list(4L,NA))
ff[,v:={ok <- !is.na(v);ifelse(ok,v,v[ok][1])},by=id1]