在R中,我需要一些可能相当简单的内容,我想引用数据框架中的一系列列(例如,提取几个选择变量)。但是,我不知道他们的列号。通常,如果我想提取4-10列,我会说mydata,4:10。
但是,考虑到我不知道列号,我想用名字来表示它们。有什么简单的方法吗?在sas或spss中,按名字引用一系列变量是相当容易的。或者,是否有一种简单的方法可以确定哪个列号对应于R中的变量名?
发布于 2017-10-18 15:05:20
列号可以从数据帧中的列名中识别,如下所示:
which(colnames(mydf)=="a")其中mydf是数据框架,a是列号所需的列的名称。
(Source)
这可用于创建列范围:
firstcol = which(colnames(x)=="a")
lastcol = which(colnames(x)=="b")
mydf[c(firstcol:lastcol)]发布于 2013-12-04 07:12:58
获取一系列列可以通过几种方式完成。subset(data.frame, select = name4:name10),工作,但相当长。在我为一件简单的事情编写长命令之前,我就使用了它。我创建了一个函数来处理命名列/不记得大数据帧中的列号:
coln <- function(X){
y <- rbind(seq(1,ncol(X)))
colnames(y) <- colnames(X)
rownames(y) <- "col.number"
return(y)} 以下是它的工作原理:
df <- data.frame(a = 1:10, b =10:1, c = 1:10)
coln(df)
a b c
col.number 1 2 3现在你可以用数字来称呼他们,还可以看他们的名字。
发布于 2013-12-04 07:30:31
结合使用%in%和names()。它对于从数据框架中抓取一组列非常有用。当您只想保留一个子集并删除其余部分时,您可以否定该表达式。在R控制台提示符下键入?"%in%"以获得更多详细信息。
set.seed(1234)
mydf <- data.frame(A = runif(5, 1, 2),
B = runif(5, 3, 4),
C = runif(5, 5, 6),
D = runif(5, 7, 8),
E = runif(5, 9, 10))
mydf
keep.cols <- c('A','D','E')
mydf[, names(mydf) %in% keep.cols]
drop.cols <- c('A','B','C')
mydf[, !names(mydf) %in% drop.cols]数据框架:
> mydf
A B C D E
1 1.113703 3.640311 5.693591 7.837296 9.316612
2 1.622299 3.009496 5.544975 7.286223 9.302693
3 1.609275 3.232551 5.282734 7.266821 9.159046
4 1.623379 3.666084 5.923433 7.186723 9.039996
5 1.860915 3.514251 5.292316 7.232226 9.218800列的子集:
> mydf[, names(mydf) %in% keep.cols]
A D E
1 1.113703 7.837296 9.316612
2 1.622299 7.286223 9.302693
3 1.609275 7.266821 9.159046
4 1.623379 7.186723 9.039996
5 1.860915 7.232226 9.218800保留列的子集并删除其余的列:
> mydf[, !names(mydf) %in% drop.cols]
D E
1 7.837296 9.316612
2 7.286223 9.302693
3 7.266821 9.159046
4 7.186723 9.039996
5 7.232226 9.218800https://stackoverflow.com/questions/20369145
复制相似问题