r-重命名数据帧的列,并在末尾添加一些数字



我正在处理一个相当复杂的数据帧。我试图通过多次在每列中添加一些终端数字来重命名它的列。我该怎么做?

让我举一个例子:

df=data.frame(disease=c("HB1","HB2","HB3","HB4"),
region="AZ",
hospitalAZ=runif(4),
hospitalAZ=runif(4),
hospitalAZ=runif(4),
hospitalAZ=runif(4))

这只是一个愚蠢的例子。结果应该是:;区域";应命名为HospitalAZ1、HospitalAZ2、Hospital AZ1、住院AZ2。我正在寻找一种简洁的方法,在这种情况下,将1和2添加到4列中,并重复(在这种情况中为2次(。那么,如何在xls文件中提取结果?

我们可以使用rename_with

library(dplyr)
library(stringr)
df <- df %>% 
rename_with(~ make.unique(str_c("HospitalAZ", rep(1:2,
length.out = length(.x)))), starts_with("hospitalAZ"))

-输出

disease region HospitalAZ1 HospitalAZ2 HospitalAZ1.1 HospitalAZ2.1
1     HB1     AZ   0.1796734  0.28729264     0.8549300     0.8486733
2     HB2     AZ   0.8518319  0.03438504     0.5909983     0.8378173
3     HB3     AZ   0.3961885  0.67294967     0.4627137     0.5484321
4     HB4     AZ   0.9955195  0.38767387     0.1961428     0.6010028

注意:matrix可能有重复的列名,但不建议使用data.frame重复的列名。此外,重复的列名可能会导致错误


base R中,我们可以进行

i1 <- startsWith(names(df), "hospitalAZ")
names(df)[i1] <- paste0("HospitalAZ", rep(1:2, length.out = sum(i1)))
> df
disease region HospitalAZ1 HospitalAZ2 HospitalAZ1 HospitalAZ2
1     HB1     AZ   0.1796734  0.28729264   0.8549300   0.8486733
2     HB2     AZ   0.8518319  0.03438504   0.5909983   0.8378173
3     HB3     AZ   0.3961885  0.67294967   0.4627137   0.5484321
4     HB4     AZ   0.9955195  0.38767387   0.1961428   0.6010028

最新更新