r - 如何从 R 中的列中获取特定数字?
问题描述
我有一个看起来像这样的df:
columnA B100 Score Score2
G01440100208022 10010208022 35 2
G01330100208023 10010208023 61 4
G01090100208024 10010208024 48 2
G01007300129114 10730129114 13 1
G62117300129121 10730129121 74 6
G72007300129122 10730129122 63 4
我想在G0
ifcolumnA
开头之后提取前 4 个数字G0
。例如,这将是1440,1330,1090
前三行。
如果列以 G(number) 开头,例如最后一行 (G7)。我想提取 G 之后的前 5 个数字。例如,这将是62117, 72007
.
有谁知道我怎么能轻松做到这一点?理想情况下,最终的 df 看起来像:
columnA B100 Score Score2 New
G01440100208022 10010208022 35 2 1440
G01330100208023 10010208023 61 4 1330
G01090100208024 10010208024 48 2 1090
G01007300129114 10730129114 13 1 1007
G62117300129121 10730129121 74 6 62117
G72007300129122 10730129122 63 4 72007
解决方案
一个选项可以case_when
用于多个条件(尽管在这种情况下,还有其他更简单的选项)
library(stringr)
library(dplyr)
df1 %>%
mutate(New = case_when(str_detect(columnA, "^G0") ~
str_sub(columnA, 3, 6), TRUE ~ str_sub(columnA,2, 6)))
# columnA B100 Score Score2 New
#1 G01440100208022 10010208022 35 2 1440
#2 G01330100208023 10010208023 61 4 1330
#3 G01090100208024 10010208024 48 2 1090
#4 G01007300129114 10730129114 13 1 1007
#5 G62117300129121 10730129121 74 6 62117
#6 G72007300129122 10730129122 63 4 72007
或者更简单的选择是捕获“G”之后的 5 位数字,然后转换为,numeric
以便删除开头的 0
df1 %>%
mutate(New = as.integer( sub("^G(\\d{5}).*", "\\1", columnA)))
# columnA B100 Score Score2 New
#1 G01440100208022 10010208022 35 2 1440
#2 G01330100208023 10010208023 61 4 1330
#3 G01090100208024 10010208024 48 2 1090
#4 G01007300129114 10730129114 13 1 1007
#5 G62117300129121 10730129121 74 6 62117
#6 G72007300129122 10730129122 63 4 72007
或者只是使用base R
as.integer( sub("^G(\\d{5}).*", "\\1", df1$columnA))
#[1] 1440 1330 1090 1007 62117 72007
或与substr
as.integer(substr(df1$columnA, 2, 6))
数据
df1 <- structure(list(columnA = c("G01440100208022", "G01330100208023",
"G01090100208024", "G01007300129114", "G62117300129121", "G72007300129122"
), B100 = c(10010208022, 10010208023, 10010208024, 10730129114,
10730129121, 10730129122), Score = c(35L, 61L, 48L, 13L, 74L,
63L), Score2 = c(2L, 4L, 2L, 1L, 6L, 4L)), class = "data.frame",
row.names = c(NA,
-6L))
推荐阅读
- git - Git不允许我输入我的克隆密码,因为我第一次弄错了
- c++ - 如何将数据类型声明从 .cpp 文件传输到 .cu 文件?
- react-native - 尝试在没有身份验证的情况下触发生物识别提示
- c# - 使用自定义 INavigationService 实现将参数传递给 ViewModel?
- lstm - 解决 VAE 中的爆炸梯度
- jquery - 单击按钮后如何遍历 DOM 以获取特定元素
- php - 404 错误页面允许访问我的数据库
- python - Python如何知道已经存储在其内存中的值?
- react-native - 在 react-native 和 native-android 之间设置桥梁后,apk 不起作用。但虚拟完成
- multithreading - 了解协程