我有一些列要从数据框中删除.我知道我们可以使用以下内容单独删除它们:
df$x <- NULL
Run Code Online (Sandbox Code Playgroud)
但我希望用更少的命令来做到这一点.
另外,我知道我可以使用整数索引来删除列,如下所示:
df <- df[ -c(1, 3:6, 12) ]
Run Code Online (Sandbox Code Playgroud)
但我担心我的变量的相对位置可能会改变.
考虑到R的强大程度,我认为可能有一种更好的方法,就是逐一删除每一列.
我有一个大型数据集,我想阅读特定列或删除所有其他列.
data <- read.dta("file.dta")
Run Code Online (Sandbox Code Playgroud)
我选择了我不感兴趣的列:
var.out <- names(data)[!names(data) %in% c("iden", "name", "x_serv", "m_serv")]
Run Code Online (Sandbox Code Playgroud)
而且我想做的事情如下:
for(i in 1:length(var.out)) {
paste("data$", var.out[i], sep="") <- NULL
}
Run Code Online (Sandbox Code Playgroud)
删除所有不需要的列.这是最佳解决方案吗?
我需要从包含几百列的data.frame中删除一列.
有了data.frame,我会习惯性subset地做到这一点:
> dat <- data.table( data.frame(x=runif(10),y=rep(letters[1:5],2),z=runif(10)),key='y' )
> subset(dat,select=c(-z))
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: 0.3980169 e
10: 0.1921226 e
Run Code Online (Sandbox Code Playgroud)
显然这仍然有效,但它似乎不是一个非常类似data.table的习语.我可以手动构建一个我想保留的列名列表,这似乎更像一些data.table:
> dat[,list(x,y)]
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: …Run Code Online (Sandbox Code Playgroud)