如何通过字符串搜索数据框的列名并将整个列名替换为新列名(用于下游PCA)
How to search column names of a data frame by a character string and replace the entire column name with a new one (for downstream 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 与样本作为因子进行聚类。我希望我的想法是正确的。谢谢你的帮助。
这是一个带有 sub
的 base R
选项,我们从列名中提取第 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)
我们还可以使用 word
来自 stringr
library(stringr)
names(df1)[-1] <- word(names(df1)[-1], 4, sep="_")
注意:最好不要有重复的列名,并且在 data.frame
中它会被 make.unique
更改
数据
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))
我正在尝试创建一个 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 与样本作为因子进行聚类。我希望我的想法是正确的。谢谢你的帮助。
这是一个带有 sub
的 base R
选项,我们从列名中提取第 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)
我们还可以使用 word
来自 stringr
library(stringr)
names(df1)[-1] <- word(names(df1)[-1], 4, sep="_")
注意:最好不要有重复的列名,并且在 data.frame
中它会被 make.unique
数据
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))