我有一个大型数据集,我想读取特定列或删除所有其他列。
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 }
删除所有不需要的列。这是最佳解决方案吗?
您应该使用索引或subset函数。例如 :
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函数和运算符:-
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:然后您可以-直接在列名向量上使用运算符,甚至可以省略名称周围的引号!
select
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