背景
我有一张调查表如下
E313 B515 C515 ... (more columns)
1122 John doe I don't like the lesson
2211 Mary Jane It was excellent调查提供者还提供了对调查中的列进行解码的标签如下(survey_data_map.csv):
Code Label
E313 Unique Identifier
B515 Full name
C515 Feedback
.
.
.
(more rows)因此,我编写了一个小片段,将调查中的列解码到列标签上。
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-循环以使用列索引而不是使用列名Code和Label。
谢谢。
发布于 2022-01-14 11:21:39
通常,数据帧的列可以使用[[[子集运算符](https://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.html)来处理。您可以使用数字索引或名称(作为字符串)这样做:
survey_data_map[[1L]] # same as
survey_data_map[['Code']]然而,确保这是你真正应该做的!你写道:
如果提供程序更改了
的列名,怎么办?
这确实是一个值得关注的问题!但是,至少如果发生这种情况,很可能会出现错误。相反,另一件经常发生的事情是,有人重新排序了表的列。如果发生这种情况,并且使用列索引,您的代码将继续运行,但它会产生错误的结果。
https://stackoverflow.com/questions/70709412
复制相似问题