不能操作data.table中的列 [英] cannot manipulate a column in a data.table
本文介绍了不能操作data.table中的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据表:
(f < - data.table(id1 = c 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
时,code>
:
> by =id1]
eval(expr,envir,enclosure)中的错误[ ):object'v'not found
Calls:[ - > [.data.table - > eval - > eval
显然,我缺少一些非常简单的东西...
这是一个解决方案: f [,v: = {
ok< - !is.na(v)
ifelse(ok,v,v [ok] [1])$ b $ b},by = id1]
请注意,如果 v
对于一个组,完全 NA
:
f ff< - rbind(f,list(4L,NA),list(4L,NA))
ff [,v:= {ok < - !is.na(v); ifelse (ok,v,v [ok] [1])},by = id1]
I have a 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
when I try to set missing v
from the present value in the group:
> 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
Obviously, I am missing something very simple...
解决方案
This is one solution:
f[, v:={
ok <- !is.na(v)
ifelse(ok,v,v[ok][1])
}, by=id1]
Note that if v
is entirely NA
for one group, it will stay that way:
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]
这篇关于不能操作data.table中的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文