gpt4 book ai didi

重命名一系列列名中的变量

转载 作者:行者123 更新时间:2023-12-01 15:48:38 25 4
gpt4 key购买 nike

我有如下一些变量:

colnames(samp)

[1] "Q11_1_1" "Q11_1_2" "Q11_1_3" "Q11_1_4" "Q11_1_5" "Q11_1_6" "Q11_1_7" "Q11_1_8" "Q11_1_9" "Q11_1_10"
[11] "Q11_1_11" "Q11_1_12" "Q11_1_99" "Q11_2_1" "Q11_2_2" "Q11_2_3" "Q11_2_4" "Q11_2_5" "Q11_2_6" "Q11_2_7"
[21] "Q11_2_8" "Q11_2_9" "Q11_2_10" "Q11_2_11" "Q11_2_12" "Q11_2_99"

我想在中间和最后交换值例如

Q11_1_1 -> Q11_1_1

Q11_1_2 -> Q11_2_1

...

Q11_1_99 -> Q11_99_2

我可以这样做(但这非常耗时)。

samp %>% 
rename(Q11_1_2 = Q11_2_1)

知道怎么做吗?

最佳答案

这里有两种不同的选择。第一个更紧凑,但第二个避免了正则表达式。两者都没有使用包。

1) sub 像这样使用 sub:

# test data
DF <- data.frame("Q11_1_1" = 1, "Q11_1_2" = 2, "Q11_1_3" = 3)

names(DF) <- sub("(\\d+)_(\\d+)$", "\\2_\\1", names(DF))

DF
## Q11_1_1 Q11_2_1 Q11_3_1
## 1 1 2 3

2) read.table 这个替代方案更长但不使用任何正则表达式。

# test data
DF <- data.frame("Q11_1_1" = 1, "Q11_1_2" = 2, "Q11_1_3" = 3)

names(DF) <- with(read.table(text = names(DF), sep = "_"), paste(V1, V3, V2, sep="_"))

DF
## Q11_1_1 Q11_2_1 Q11_3_1
## 1 1 2 3

如果不是所有的列都具有指定的形式,这将选择那些不存在的列并对其进行转换。在这种情况下,我们需要所有这些,因此不需要,但如果有其他列,则可以使用。

ix <- grep("_.*_", names(DF))  # 1:3
names(DF)[ix] <-
with(read.table(text = names(DF)[ix], sep = "_"), paste(V1, V3, V2, sep="_"))

关于重命名一系列列名中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58185009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com