首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按索引引用列,而不是按名称引用

按索引引用列,而不是按名称引用
EN

Stack Overflow用户
提问于 2022-01-14 10:47:33
回答 1查看 47关注 0票数 1

背景

我有一张调查表如下

代码语言:javascript
复制
E313     B515       C515      ...   (more columns)
1122     John doe   I don't like the lesson
2211     Mary Jane  It was excellent

调查提供者还提供了对调查中的列进行解码的标签如下(survey_data_map.csv):

代码语言:javascript
复制
Code    Label
E313    Unique Identifier
B515    Full name
C515    Feedback
.
.
.
(more rows)

因此,我编写了一个小片段,将调查中的列解码到列标签上。

代码语言:javascript
复制
survey_data_map <- read.csv("survey_data_map.csv")
for(i in 1:length(names(survey))) {
  
  label <- survey_data_map$Label[survey_data_map$Code == names(survey)[i]]
  if (length(label) > 0) {
    names(survey)[i] <- label  
  }
}

问题

解码列名的survey_data_map.csv中的列名可能会更改。我的问题是如何重写for-循环以使用列索引而不是使用列名CodeLabel

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-14 11:21:39

通常,数据帧的列可以使用[[[子集运算符](https://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.html)来处理。您可以使用数字索引或名称(作为字符串)这样做:

代码语言:javascript
复制
survey_data_map[[1L]] # same as
survey_data_map[['Code']]

然而,确保这是你真正应该做的!你写道:

如果提供程序更改了

的列名,怎么办?

这确实是一个值得关注的问题!但是,至少如果发生这种情况,很可能会出现错误。相反,另一件经常发生的事情是,有人重新排序了表的列。如果发生这种情况,并且使用列索引,您的代码将继续运行,但它会产生错误的结果。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70709412

复制
相关文章

相似问题

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