如何更改列表列表中嵌套数据框的名称
How to change colnames of nested dataframes in a list of lists
我有一个数据框列表,其名称如下所示:
lapply(L2, function(x) {print(names(x))}):
$D1
[1] "TP1.adjPVal" "TP1.Log2FC"
$D2
[1] "TP2.adjPVal" "TP2.Log2FC"
$D3
[1] "TP3.adjPVal" "TP3.Log2FC"
$D7
[1] "TP7.adjPVal" "TP7.Log2FC"
$D14
[1] "TP14.adjPVal" "TP14.Log2FC"
我想把所有的TP
改成D
。
我已经通过搜索 Whosebug 尝试了以下代码,但正在努力实现我的目标。
lapply(L2, function(x) {gsub(x = names(x), pattern = 'TP', replacement = 'D')})
setNames(L2$D1, tp$D1)
lapply(L2, function(x) { colnames(x) <- gsub(x = colnames(x), pattern = 'TP', replacement = 'D')})
非常欢迎在此问题上提供任何帮助。
我们需要 return x
即 data.frame。在 OP 的代码中,它只是在做作业。此外,由于 'TP' 位于字符串的开头,可以使用 ^
来指定开头,我们不需要 gsub
而是使用 sub
(用于单个替换)
lapply(L2, function(x) {
colnames(x) <- sub(x = colnames(x), pattern = '^TP', replacement = 'D')
x}
)
或者另一个选项是 setNames
。在这种情况下,我们可以在运行时进行分配,因为 setNames
在内部进行分配
lapply(L2, function(x) setNames(x,
sub(x = colnames(x), pattern = '^TP', replacement = 'D')))
此外,如果我们使用 tidyverse
library(tidyverse)
map(L2, ~ .x %>%
rename_at(vars(starts_with("TP")), ~ str_replace(., "^TP", "D")))
我有一个数据框列表,其名称如下所示:
lapply(L2, function(x) {print(names(x))}):
$D1
[1] "TP1.adjPVal" "TP1.Log2FC"
$D2
[1] "TP2.adjPVal" "TP2.Log2FC"
$D3
[1] "TP3.adjPVal" "TP3.Log2FC"
$D7
[1] "TP7.adjPVal" "TP7.Log2FC"
$D14
[1] "TP14.adjPVal" "TP14.Log2FC"
我想把所有的TP
改成D
。
我已经通过搜索 Whosebug 尝试了以下代码,但正在努力实现我的目标。
lapply(L2, function(x) {gsub(x = names(x), pattern = 'TP', replacement = 'D')})
setNames(L2$D1, tp$D1)
lapply(L2, function(x) { colnames(x) <- gsub(x = colnames(x), pattern = 'TP', replacement = 'D')})
非常欢迎在此问题上提供任何帮助。
我们需要 return x
即 data.frame。在 OP 的代码中,它只是在做作业。此外,由于 'TP' 位于字符串的开头,可以使用 ^
来指定开头,我们不需要 gsub
而是使用 sub
(用于单个替换)
lapply(L2, function(x) {
colnames(x) <- sub(x = colnames(x), pattern = '^TP', replacement = 'D')
x}
)
或者另一个选项是 setNames
。在这种情况下,我们可以在运行时进行分配,因为 setNames
在内部进行分配
lapply(L2, function(x) setNames(x,
sub(x = colnames(x), pattern = '^TP', replacement = 'D')))
此外,如果我们使用 tidyverse
library(tidyverse)
map(L2, ~ .x %>%
rename_at(vars(starts_with("TP")), ~ str_replace(., "^TP", "D")))