从带有文本和数字的列中提取数字
Extract number from a column with text & number
我有一个如下所示的数据框列:
Chr1
铬14
铬19
铬2
铬8
Chr7
我想创建一个如下所示的新列:
1个
14
19
2个
8个
7
我试过这段代码,但它对我不起作用:
新$CHR_1 <- substr(OLD$CHR, 4, 4) %>% as.integer
请在下面找到软件包 data.table
和 stringr
的解决方案。您只需要使用以下代码行:
REPREX
- 您的数据
library(data.table)
library(stringr)
# Create your data.frame
OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
- 代码
# Convert into data.table
setDT(OLD)
# Add a column "Chr_ID" containing the numbers
OLD[ , Chr_ID := lapply(.SD, str_extract,"(?<=^Chr)\d+"), .SDcols = "CHR"]
- 输出
OLD
#> CHR Chr_ID
#> 1: Chr1 1
#> 2: Chr14 14
#> 3: Chr19 19
#> 4: Chr2 2
#> 5: Chr8 8
#> 6: Chr7 7
由 reprex package (v2.0.1)
于 2021-10-13 创建
您可以使用 readr::parse_number
从列中提取数字。
OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
OLD$num <- readr::parse_number(OLD$CHR)
OLD
# CHR num
#1 Chr1 1
#2 Chr14 14
#3 Chr19 19
#4 Chr2 2
#5 Chr8 8
#6 Chr7 7
我有一个如下所示的数据框列:
Chr1 铬14 铬19 铬2 铬8 Chr7
我想创建一个如下所示的新列: 1个 14 19 2个 8个 7
我试过这段代码,但它对我不起作用: 新$CHR_1 <- substr(OLD$CHR, 4, 4) %>% as.integer
请在下面找到软件包 data.table
和 stringr
的解决方案。您只需要使用以下代码行:
REPREX
- 您的数据
library(data.table)
library(stringr)
# Create your data.frame
OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
- 代码
# Convert into data.table
setDT(OLD)
# Add a column "Chr_ID" containing the numbers
OLD[ , Chr_ID := lapply(.SD, str_extract,"(?<=^Chr)\d+"), .SDcols = "CHR"]
- 输出
OLD
#> CHR Chr_ID
#> 1: Chr1 1
#> 2: Chr14 14
#> 3: Chr19 19
#> 4: Chr2 2
#> 5: Chr8 8
#> 6: Chr7 7
由 reprex package (v2.0.1)
于 2021-10-13 创建您可以使用 readr::parse_number
从列中提取数字。
OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
OLD$num <- readr::parse_number(OLD$CHR)
OLD
# CHR num
#1 Chr1 1
#2 Chr14 14
#3 Chr19 19
#4 Chr2 2
#5 Chr8 8
#6 Chr7 7