r语言 - 如何按字符串搜索数据框的列名,并将整个列名替换为新列名(对于下游 PCA)



我正在尝试创建一个 PCA 图,所以我想按批次重新分组我的列(这样我就使用我的列名作为因子(。我已经阅读了这两个(一个,两个(问题并尝试了他们的建议,但它没有正常工作(或者我做错了什么(。

我有一个数据帧,其中包含几千列,示例名称如下:

Measure    Br_LV_05_BC1_1_POS  Br_Lv_05_BC1_2_POS Br_Lv_05_BC1_3_POS Br_Lv_05_LR_1_POS Br_Lv_05_LR_2_POS
500               3000                8000                5000              1000              2000
600               4000                4000                4000              8000              8000 
700               5000                6000                4000              9000              8000 
800               6000                7000                8000              2000              1000

我想做的是搜索并替换包含字符串"BC1"的所有列,并将该 BC1 重命名为"LR"。这样,我可以让 R 使用这些列作为 PCA 的因子,而不是将每列作为单个样本测量的 PCA。

Measure  BC1    BC1     BC1     LR      LR
500      3000   8000    5000    1000    2000
600      4000   4000    4000    8000    8000 
700      5000   6000    4000    9000    8000 
800      6000   7000    8000    2000    1000

这样,我可以转置数据(如果需要(并使用样本作为因子对PCA进行聚类。我希望我的想法是正确的。谢谢你的帮助。

这是一个base R选项,其中包含sub,其中wee从列名中提取第4个单词并更新它

names(df1)[-1] <-  sub("^([^_]+_){3}([^_]+)_.*", "\2", names(df1)[-1])
names(df1)[-1]
#[1] "BC1" "BC1" "BC1" "LR"  "LR" 

或者另一种选择是strsplit_并提取第 4 个元素

names(df1)[-1] <- sapply(strsplit(names(df1)[-1], "_"), `[`, 4)

我们也可以使用stringrword

library(stringr)
names(df1)[-1] <- word(names(df1)[-1], 4, sep="_")

注意:最好不要有重复的列名,无论如何都会被make.unique更改data.frame

数据

df1 <- structure(list(Measure = c(500L, 600L, 700L, 800L), Br_LV_05_BC1_1_POS = c(3000L, 
4000L, 5000L, 6000L), Br_Lv_05_BC1_2_POS = c(8000L, 4000L, 6000L, 
7000L), Br_Lv_05_BC1_3_POS = c(5000L, 4000L, 4000L, 8000L), Br_Lv_05_LR_1_POS = c(1000L, 
8000L, 9000L, 2000L), Br_Lv_05_LR_2_POS = c(2000L, 8000L, 8000L, 
1000L)), class = "data.frame", row.names = c(NA, -4L))

最新更新