![](/img/trans.png)
[英]How to select a column based on part of a contained string and then drop part of the column name in R? (Column position may vary)
[英]column names in R - substitute part of name string
我有X745.971008.Nanometers
作為 col 名稱,但不知道如何使其格式為:
我想要col名稱: 745.971008_nm
或更好,波長四舍五入為 3 dp: 745.971_nm
我試過: names(df) <- sub('X\\.+(\\d+\\.\\d+)\\.Nanometers\\.', '\\1_nm', names(df))
和: colnames(df) <- gsub("X(.+).Nanometers.", "\\1_nm", colnames(df))
非常感謝
為此,請嘗試使用rename_all
和str_replace_all
。
我想這將是最准確的方法,因為它會按照您的要求對變量名稱中的值進行四舍五入:
df <- data.frame(
'X745.971008.Nanometers' = c(1, 2, 3, 4, 5),
'X743.971999.Nanometers' = c(1, 2, 3, 4, 5)
)
library(dplyr)
library(stringr)
df %>%
stack() %>%
mutate(ind = str_replace(ind, 'X', ''),
ind = str_replace(ind, '.Nanometers', ''),
ind = paste(round(as.numeric(ind), digits = 3), '_nm')) %>%
unstack(df2, form = values~ind) %>%
rename_all(
funs(
stringr::str_replace_all(., 'X', '')
)
) %>%
rename_all(
funs(
stringr::str_replace_all(., '._', '_')
)
)
#> 743.972_nm 745.971_nm
#> 1 1 1
#> 2 2 2
#> 3 3 3
#> 4 4 4
#> 5 5 5
由代表 package (v0.3.0) 於 2021 年 3 月 18 日創建
或者
df <- data.frame(
'X745.971008.Nanometers' = c(1, 2, 3, 4, 5),
'X743.971999.Nanometers' = c(1, 2, 3, 4, 5)
)
library(dplyr)
library(stringr)
df %>%
rename_all(
funs(
stringr::str_replace_all(., 'X', '')
)
) %>%
rename_all(
funs(
stringr::str_replace_all(., '.Nanometers', '_nm')
)
)
#> 745.971008_nm 743.971999_nm
#> 1 1 1
#> 2 2 2
#> 3 3 3
#> 4 4 4
#> 5 5 5
由代表 package (v0.3.0) 於 2021 年 3 月 18 日創建
或者
df <- data.frame(
'X745.971008.Nanometers' = c(1, 2, 3, 4, 5),
'X743.971999.Nanometers' = c(1, 2, 3, 4, 5)
)
library(dplyr)
library(stringr)
df %>%
rename_all(
funs(
stringr::str_replace_all(., 'X', '')
)
) %>%
rename_all(
funs(
stringr::str_replace_all(., '\\d\\d\\d.Nanometers', '_nm')
)
)
#> 745.971_nm 743.971_nm
#> 1 1 1
#> 2 2 2
#> 3 3 3
#> 4 4 4
#> 5 5 5
由代表 package (v0.3.0) 於 2021 年 3 月 18 日創建
您可以使用sub
:
x <- 'X745.971008.Nanometers'
sub('X(\\d+\\.\\d+).Nanometers', '\\1_nm', x)
#[1] "745.971008_nm"
如果是列名,請嘗試:
colnames(df) <- sub('X(\\d+\\.\\d+).Nanometers', '\\1_nm', colnames(df))
如果要對值進行四舍五入:
paste0(round(as.numeric(sub('X(\\d+\\.\\d+).Nanometers', '\\1',x)), 3), '_nm')
#[1] "745.971_nm"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.