首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参考R中按名称列出的列的范围

参考R中按名称列出的列的范围
EN

Stack Overflow用户
提问于 2013-12-04 07:06:03
回答 6查看 24.6K关注 0票数 6

在R中,我需要一些可能相当简单的内容,我想引用数据框架中的一系列列(例如,提取几个选择变量)。但是,我不知道他们的列号。通常,如果我想提取4-10列,我会说mydata,4:10。

但是,考虑到我不知道列号,我想用名字来表示它们。有什么简单的方法吗?在sas或spss中,按名字引用一系列变量是相当容易的。或者,是否有一种简单的方法可以确定哪个列号对应于R中的变量名?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-10-18 15:05:20

列号可以从数据帧中的列名中识别,如下所示:

代码语言:javascript
复制
which(colnames(mydf)=="a")

其中mydf是数据框架,a是列号所需的列的名称。

(Source)

这可用于创建列范围:

代码语言:javascript
复制
firstcol = which(colnames(x)=="a")
lastcol = which(colnames(x)=="b")

mydf[c(firstcol:lastcol)]
票数 6
EN

Stack Overflow用户

发布于 2013-12-04 07:12:58

获取一系列列可以通过几种方式完成。subset(data.frame, select = name4:name10),工作,但相当长。在我为一件简单的事情编写长命令之前,我就使用了它。我创建了一个函数来处理命名列/不记得大数据帧中的列号:

代码语言:javascript
复制
coln <- function(X){
  y <- rbind(seq(1,ncol(X)))
  colnames(y) <- colnames(X)
rownames(y) <- "col.number"
  return(y)} 

以下是它的工作原理:

代码语言:javascript
复制
df <- data.frame(a = 1:10, b =10:1, c = 1:10)
coln(df)
           a b c
col.number 1 2 3

现在你可以用数字来称呼他们,还可以看他们的名字。

票数 7
EN

Stack Overflow用户

发布于 2013-12-04 07:30:31

结合使用%in%names()。它对于从数据框架中抓取一组列非常有用。当您只想保留一个子集并删除其余部分时,您可以否定该表达式。在R控制台提示符下键入?"%in%"以获得更多详细信息。

代码语言:javascript
复制
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]

数据框架:

代码语言:javascript
复制
> 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

列的子集:

代码语言:javascript
复制
> 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

保留列的子集并删除其余的列:

代码语言:javascript
复制
> 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.218800
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20369145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档