不能操作data.table中的列 [英] cannot manipulate a column in a data.table

查看:178
本文介绍了不能操作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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆