我有一个数据框架列,看起来像这样:
Chr1Chr14Chr19Chr2Chr8Chr7
我想创建一个新的列,看起来如下:11419287
我试过这段代码,但它不适合我:新的CHR_1 & lt;美元——substr(老杆使用美元,4,4)%祝辞% as.integer
您可以使用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
请在下面找到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包(v2.0.1)在2018-10-13上创建