nhe*_*121 25 r data.table
我想打印数据表的所有列,dt除了其中一个已命名V3但不想按编号而是按名称引用它.这是我的代码:
dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10))
dt[,-3,with=FALSE] # Is this the only way to not print column "V3"?
Run Code Online (Sandbox Code Playgroud)
使用这种data frame方式,可以通过代码执行此操作:
df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10))
df[,!(colnames(df)%in% c("X3"))]
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:是否有另一种方法不在数据表中打印一列而不必按编号引用它?我想找到类似于我上面使用的数据帧语法但使用数据表的东西.
And*_*rie 37
使用与a非常相似的语法data.frame,但添加参数with=FALSE:
dt[, setdiff(colnames(dt),"V9"), with=FALSE]
V1 V2 V3 V4 V5 V6 V7 V8 V10
1: 1 1 1 1 1 1 1 1 1
2: 0 0 0 0 0 0 0 0 0
3: 1 1 1 1 1 1 1 1 1
4: 0 0 0 0 0 0 0 0 0
5: 0 0 0 0 0 0 0 0 0
6: 1 1 1 1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
with=FALSE在以下j参数的文档中很好地解释了使用?data.table:
Y:一个单一的列名,列名的单expresson,list()列名,一个表达式或函数调用计算结果为清单(包括表达的data.frame和data.table它们是列表,太),或(当with=FALSE)作为以J相同[.data.frame.
从v1.10.2开始,也可以按如下方式执行此操作:
keep <- setdiff(names(dt), "V9")
dt[, ..keep]
Run Code Online (Sandbox Code Playgroud)
前缀符号..将在调用范围(即全局环境)中查找,其值被视为列名或数字(源).
42-*_*42- 14
这是一种patterns用于转换为数字并允许负列索引的方法:
dt[ , !'V3']
# or
drop_cols = 'V3'
dt[ , !..drop_cols]
Run Code Online (Sandbox Code Playgroud)
你确实说"V3"被排除了,对吧?
Yva*_*anR 11
也许它只存在于data.table的最新版本中(我使用的是1.9.6),但你可以这样做:
dt[, -'V3']
Run Code Online (Sandbox Code Playgroud)
对于几列:
dt[, -c('V3', 'V9')]
Run Code Online (Sandbox Code Playgroud)
请注意,变量名称周围的引号是必需的.
从1.12.0版开始,还可以使用名称上的正则表达式选择列:
iris_DT <- as.data.table(iris)
iris_DT[, .SD, .SDcols = patterns(".e.al")]
Run Code Online (Sandbox Code Playgroud)