我有一个带有一串列的数据表,例如:

dt<-data.table(matrix(runif(10*10),10,10))

我想对数据表执行一些操作,比如生成一个相关矩阵(cor(dt)).为了做到这一点,我想删除一些列,其中包含非数值或超出一定范围的值.

假设我想找到不包括V1,V2,V3和V5的相关矩阵.

以下是我目前的做法:

cols<-!(colnames(dt)=="V1" | colnames(dt)=="V2" | colnames(dt)=="V3" | colnames(dt)=="V5")
new_dt<-subset(dt,,cols)
cor(new_dt)

考虑到数据,我觉得这相当麻烦.表语法通常非常优雅.有更好的方法吗?

推荐答案

使用with=FALSE:

cols = paste("V", c(1,2,3,5), sep="")

dt[, !cols, with=FALSE]

我建议你看一下"Introduction to data.table"个小插曲.


Update:v1.10.2开始,你还可以做:

dt[, ..cols]

请参阅v1下的第一条新闻.10.2 here以获取更多解释.

R相关问答推荐

提取rame中对应r中某个变量的n个最小正值和n个最大负值的条目

如果行和列名以相同的开头,将矩阵值设置为0

使用tidyverse / Mutate的存款账户余额

如何修复R码的置换部分?

整数成随机顺序与约束R?

将数据集中的值增加到当前包含的最大值

删除具有相同标题的tabPanel(shinly)

在R中无法读入具有Readxl和lApply的数据集

将饼图插入条形图

按多列统计频次

扩展R中包含列表的数据框

远离理论值的伽马密度曲线下面积的近似

为什么这个表格格罗布不打印?

如何移动点以使它们的打印不重叠

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

如何修改GT表中组名行的 colored颜色 ?

分隔日期格式为2020年7月1日

动态统计函数在ShinyApp内部更改

带查找数据的FCT_REORDER.帧

通过分析特定列中的字符串在数据框中创建新的行和列