我一直在try 用包含对str_locate
和str_sub
的调用的用户定义函数来改变数据集.其目的是定位并提取字符串中3个数字序列中的第一个数字,然后将该数字(作为character
)添加到名为数百的新列中.
例如:
- 给定字符串‘821’:字符串‘8’与
Hundreds
相加. - 给定字符串‘Af823.22’,字符串‘8’与
Hundreds
相加.
以下是我的功能:
get_hundred <- function(s) {
match_pos <- str_locate(s, "[0-9]{3}")
return(str_sub(s, match_pos[1], match_pos[1]))
我的数据的前20行如下所示:
df1 <- structure(list(call.number = c("372.35044 L4383", "344.049 C235",
"344.410415 DIM", "346.944043 NEI", "808.0667 B2616", "363.6909945 CAST",
"ABS 2015.0", "371.38 MACK", "372.1102 PRAW", "A823.3 WRIG/T",
"havmf test", "[DENTISTRY] CROW", "[DENTISTRY] JAWS", "[DENTISTRY] LOWE",
"[DENTISTRY] MOLA", "[DENTISTRY] SERI", "[DENTISTRY] SKUL", "[DENTISTRY] TEET",
"[HEALTH]ANKL", "[HEALTH]FOOT"), num.items = c(1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
过滤数据
事实上,我只是在call.number
的大列表中寻找特定形式的字符串.我相信下面的str_detect
是检测到我想要的弦的形式.
df2 <- df1 %>%
filter(str_detect(call.number, "^[A-Z]?[A-Z|a-z]?[0-9]{3}.*"))
我做错了什么?
现在我这样做:
df2 %>%
mutate(Hundreds = get_hundred(call.number))
然而,这样做会在第9行的Hundreds
列中显示一个‘A’,而我预计在那里会看到一个‘8’.然而,如果我在"A823.3 WRIG/T"("等价字符串")上调用get_hundred
,则该函数返回‘8’.
get_hundred("A823.3 WRIG/T")
我有什么不明白的吗?