我正在处理一个相当复杂的数据帧。我试图通过多次在每列中添加一些终端数字来重命名它的列。我该怎么做?
让我举一个例子:
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