我正在使用一个包含带有一些下划线的列的数据集。有一个图案,但它们是不同的图案,如下所示
ID Col1
1029 ap_analog
2334 critical_1_mm_1
2334 transpose_2_mm_2
9877 public_1_yes_0_no_1
9877 public_1_yes_0_no_2
1333 Lateral_mm
1333 Lateral_mm_1
1333 Lateral_mm_2
1333 Lateral_mm_3
1333 ap_mm_axial
1333 ap_mm_axial_1
1333 ap_mm_axial_2
1333 ap_mm_axial_3
9876 central_star_six_mm
9876 central_star_six_mm_1
9876 central_star_six_mm_2
9876 central_star_six_mm_3
我只是想用这样的最终数据集将数字与字符串分开
ID Col1 Index
1029 ap_analog 0
2334 critical_1_mm 1
2334 transpose_2_mm 2
9877 public_1_yes_0_no 1
9877 public_1_yes_0_no 2
1333 Lateral_mm 0
1333 Lateral_mm 1
1333 Lateral_mm 2
1333 Lateral_mm 3
1333 ap_mm_axial 0
1333 ap_mm_axial 1
1333 ap_mm_axial 2
1333 ap_mm_axial 3
9876 central_star_six_mm 0
9876 central_star_six_mm 1
9876 central_star_six_mm 2
9876 central_star_six_mm 3
现在我做这件事效率很低。像这样的东西
df1$index <- df1$Col1
for(i in 1:3) {
df1$index <- regmatches(df1$index,gregexpr("(?<=_).*",df1$index,perl=TRUE))
}
df1$index[ which(df1$index == "character(0)")] <- 0
如果有任何改进的建议,我将不胜感激。
一种方式使用dplyr
and stringr
:
我们可以提取Index
value 是末尾的数字Col1
, 更换NA
值为 0。我们可以删除最后一位数字Col1
.
library(dplyr)
library(stringr)
library(dplyr)
df %>%
mutate(Index = str_extract(Col1, '\\d+$'),
Index = replace(Index, is.na(Index), 0),
Col1 = sub('_\\d+$', '', Col1))
# ID Col1 Index
#1 1029 ap_analog 0
#2 2334 critical_1_mm 1
#3 2334 transpose_2_mm 2
#4 9877 public_1_yes_0_no 1
#5 9877 public_1_yes_0_no 2
#6 1333 Lateral_mm 0
#7 1333 Lateral_mm 1
#8 1333 Lateral_mm 2
#9 1333 Lateral_mm 3
#10 1333 ap_mm_axial 0
#11 1333 ap_mm_axial 1
#12 1333 ap_mm_axial 2
#13 1333 ap_mm_axial 3
#14 9876 central_star_six_mm 0
#15 9876 central_star_six_mm 1
#16 9876 central_star_six_mm 2
#17 9876 central_star_six_mm 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)