【发布时间】:2016-01-20 11:42:27
【问题描述】:
我有一个预先不知道列名的数据表
set.seed(1)
titles <- rep(letters[sample.int(3,replace = T)],2)
dt <- data.table( x = c(1, 1, 3, 1, 3, 1), y = c(1, 2, 1, 2, 1, 2) )
dt = dcast(dt, x+y ~ titles, fill=0, value.var = 'x')
> dt
x y a b
1: 1 1 1 0
2: 1 2 1 2
3: 3 1 0 2
我希望删除最后一列为 0 的行,但“子集”不起作用。为什么?
dt <- subset( dt, last(titles) > 0 )
我最好使用 data.table 方法。
【问题讨论】:
-
我们可以试试
dt[b!=0] -
@akrun 他不知道是
b。我想一种方法是dt[dt[[last(titles)]] > 0],但这是一个很好的问题,说明这样做的惯用方法是什么。 -
然后
dt[get(tail(names(dt),1))!=0]或dt[get(tail(titles,1))!=0] -
或
dt[eval(as.name(last(titles))) > 0] -
我猜this 有点相关
标签: r data.table subset