将data_frame中的行名从R中的字母更改为数字

时间:2017-07-21 00:30:05

标签: r gsub

我有一组数据集,来自应用于许多不同国家/地区的调查,我希望将其合并以创建单个合并的data.frame。不幸的是,对于其中一个,变量名称与其他名称不同,但它遵循一种模式:与其他变量名称一样,变量的名称类似于" VAR1"," VAR2"等等,在这一个中,他们的名字是" VAR_a"," VAR_b"等等。

到目前为止我用来解决这个问题的代码如下:

names (df) <- gsub("_a", "01", names(df)) 
names (df) <- gsub("_b", "02", names(df)) 
names (df) <- gsub("_c", "03", names(df)) 
names (df) <- gsub("_d", "04", names(df)) 
names (df) <- gsub("_e", "05", names(df)) 
names (df) <- gsub("_f", "06", names(df)) 
names (df) <- gsub("_g", "07", names(df)) 

直到第14个字母/数字(没有变量比这更远),因此它可以变得与其他data.frames类似。

我知道应该有一种方法可以使用一些甚至一行代码来完成这项工作,但是我无法找到一种方法来执行迭代或gsub内部的任何参数来执行此操作。任何人都可以帮助我吗?

我想的可能是:

names (df) <- gsub ("_[a-z]", "[1-9]", names(df))

但当然,这并没有奏效。我需要R来理解我希望每个字母成为相应的数字(&#34; _a&#34;变为1等)

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果你只想要一个gsub的版本,它可以替换模式和替换,stringr有一个名为str_replace的版本。以下代码还在任何版本的R中使用letters

library(stringr)
df <- data.frame(matrix(0, nrow = 5, ncol = 10))
colnames(df) <- paste0("abcd2345p_", letters[1:10])
colnames(df)

> [1] "abcd2345p_a" "abcd2345p_b" "abcd2345p_c" "abcd2345p_d" "abcd2345p_e"
[6] "abcd2345p_f" "abcd2345p_g" "abcd2345p_h" "abcd2345p_i" "abcd2345p_j"

str_replace(colnames(df), paste0("_", letters[1:ncol(df)], "$"), as.character(1:ncol(df)))

>  [1] "abcd2345p1"  "abcd2345p2"  "abcd2345p3"  "abcd2345p4"  "abcd2345p5" 
[6] "abcd2345p6"  "abcd2345p7"  "abcd2345p8"  "abcd2345p9"  "abcd2345p10"