我有一组数据集,来自应用于许多不同国家/地区的调查,我希望将其合并以创建单个合并的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等)
感谢任何帮助。
答案 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"