小编典典

如何在数据框中按名称删除列

all

我有一个大型数据集,我想读取特定列或删除所有其他列。

data <- read.dta("file.dta")

我选择了我不感兴趣的列:

var.out <- names(data)[!names(data) %in% c("iden", "name", "x_serv", "m_serv")]

而不是我想做的事情:

for(i in 1:length(var.out)) {
   paste("data$", var.out[i], sep="") <- NULL
}

删除所有不需要的列。这是最佳解决方案吗?


阅读 93

收藏
2022-04-01

共1个答案

小编典典

您应该使用索引或subset函数。例如 :

R> df <- data.frame(x=1:5, y=2:6, z=3:7, u=4:8)
R> df
  x y z u
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7
5 5 6 7 8

然后您可以在列索引中使用该which函数和运算符:-

R> df[ , -which(names(df) %in% c("z","u"))]
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

或者,更简单,使用函数的select参数subset:然后您可以-直接在列名向量上使用运算符,甚至可以省略名称周围的引号!

R> subset(df, select=-c(z,u))
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

请注意,您还可以选择所需的列,而不是删除其他列:

R> df[ , c("x","y")]
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

R> subset(df, select=c(x,y))
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
2022-04-01