我有一个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)]
答案 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