试图删除R中的多个列

时间:2015-04-26 16:46:49

标签: r

我有一个excel文件(sds.drop.csv)中的列名列表,我想从已导入R的数据帧中删除。

我试图将列名读入R中,如下所示

Q(a,s)

然后打算运行下面的代码,将其从名为' dat'

的数据框中删除
sds.drop <- as.list(read.csv("sds.drop.csv", header = F))

但是,没有删除列。我猜这个问题存在于我阅读数据的方式中。我尝试在没有as.list()命令的情况下读取数据,但仍然无效。有什么想法吗?

这是sds.drop.csv df的样子......

dat1 <-  dat[, !(names(dat) %in% sds.drop)]

3 个答案:

答案 0 :(得分:1)

我认为您的主要问题是您没有从read.csv()返回的data.frame中取消引用(即提取)列名列。强迫性格也是有道理的,因为这就是你需要操作的东西。因此,您应该从sds.drop分配as.character(read.csv('sds.drop.csv',header=F)[,1]);

dat <- data.frame(Q20=1:3, Q23=4:6, Q24=7:9, Q25=10:12, Q26=13:15, Q27=16:18, Q30=19:21, Q31=22:24 );
dat;
##   Q20 Q23 Q24 Q25 Q26 Q27 Q30 Q31
## 1   1   4   7  10  13  16  19  22
## 2   2   5   8  11  14  17  20  23
## 3   3   6   9  12  15  18  21  24
sds.drop <- as.character(read.csv('sds.drop.csv',header=F)[,1]);
sds.drop;
## [1] "Q20" "Q23" "Q24" "Q25" "Q26" "Q27"
dat[,!names(dat)%in%sds.drop];
##   Q30 Q31
## 1  19  22
## 2  20  23
## 3  21  24

答案 1 :(得分:1)

    #keep only the headers from the csv
    cols = colnames(read.csv('C:/myfile.csv',colClasses='character',nrows =    1,header=TRUE)[-1, ])

    #subset dataframe excluding colnames in cols
    df2 <- yourdataframe[!names(yourdataframe) %in% cols]

答案 2 :(得分:0)

尝试:

# for example (you are reading this in from Excel)
dat <- data.frame("goodcol" = c(1,2), "badcol1"= c(-1,-2),
                  "badcol2"= c(-2,-4), "goodcol2" = c(2,4))

sds.drop <- c("badcol1", "badcol2")

dat <-  dat[, !(names(dat) %in% sds.drop)]

您可能错过了一个括号,需要参考names()中的日期框架。

编辑对于后来搜索的人 - 类似于 Drop data frame columns by name