从R中每行的唯一代码中提取特定字母,仅使用tidyverse

从R中每行的唯一代码中提取特定字母,仅使用tidyverse,r,tidyverse,R,Tidyverse,我试图从每一行的唯一代码中提取最后的数字。我不知道如何在R中完成这项任务,只使用tidyverse 以下是一个例子: structure(list(`CCGCode` = c("E38000232", "E38000237", "E38000004", "E38000240", "E38000006", "E38000007"), Total = c(17, 27, 27,

我试图从每一行的唯一代码中提取最后的数字。我不知道如何在R中完成这项任务,只使用tidyverse

以下是一个例子:

structure(list(`CCGCode` = c("E38000232", "E38000237", 
"E38000004", "E38000240", "E38000006", "E38000007"), Total = c(17, 
27, 27, 43, 30, 42)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

通过在上面的数据框中找到CCGCode,您将在每一行中看到代码。我想用ccg创建一个新列,它只接受该代码的最后三位数字。例如,我们在CCGCode中有
E3800006
,只想在新列ccg中输入
006
,因为does是最后的数字。如何做到这一点。

这里有几种方法可以做到这一点,它们会产生稍微不同的最终结果,希望其中一种方法与您所寻找的方法相同

方法1

df %>% 
  separate(CCGCode, c("CCGCode", "Last_3"), sep = -3)
方法2

str_sub(df$CCGCode, -3) %>%
  as.tibble() %>% 
  bind_cols(df) %>%
  select(CCGCode, "Last_3" = value, Total)

如果您想在CCGCode的末尾输入数字,您可以使用
gsub
from base。如果您需要tidyverse提供的内容,可以使用
%%>%%
管道符号编写代码。试试这个:

#Assigning your example to df
df <-structure(list(`CCGCode` = c("E38000232", "E38000237", 
"E38000004", "E38000240", "E38000006", "E38000007"), Total = c(17, 
27, 27, 43, 30, 42)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

#gsub removes beginning of CCG code and assigns to df$new_col
df$CCGCode %>% gsub("E38000", "",.) ->df$new_col
#将示例分配给df
df%gsub(“E38000”和“,”)->df$new\u col
stringr

library(dplyr)
library(stringr)

df %>%
  mutate(code = str_sub(CCGCode, -3))

# # A tibble: 6 x 3
#   CCGCode   Total code 
#   <chr>     <dbl> <chr>
# 1 E38000232    17 232  
# 2 E38000237    27 237  
# 3 E38000004    27 004  
# 4 E38000240    43 240  
# 5 E38000006    30 006  
# 6 E38000007    42 007  
df %>%
  mutate(code = word(CCGCode, -3, -1, sep = "(?<=.)(?=.)"))

您可以使用tidyverse

library(tidyverse)
df <- data.frame(CCGCode = c("E38000232", "E38000237", "E38000004", "E38000240", "E38000006", "E38000007"), 
                 Total = c(17, 27, 27, 43, 30, 42))

df2 <- df %>% 
  mutate(CCG = str_extract(CCGCode, regex("\\d{3}$")))
#     CCGCode Total CCG
# 1 E38000232    17 232
# 2 E38000237    27 237
# 3 E38000004    27 004
# 4 E38000240    43 240
# 5 E38000006    30 006
# 6 E38000007    42 007
库(tidyverse)

df我不知道tidyverse解决方案,但是你可以使用
gsub(“(…)$|.”、“\\1',CCGCode)
或者如果所有代码都是10个字符长的
substr(CCGCode,7,10)
另一种选择
df%>%mutate(code=stringr::str\u trunc(CCGCode,width=3,side=“left”,省略号=)
对不起,前面的人没有回答。但是你的代码更优雅。我给了查德S,因为他是第一个,他也是新的堆栈溢出,事实上它起了作用。另外,我想鼓励他,因为他是新来的。不过,我感谢你的意见。谢谢。是的,我想这对第一个回答的人是公平的。非常感谢。您的应用程序非常好,因为它适用于许多其他问题!是 啊这是我的荣幸!我们有很多解决方案。只要用对你最好的东西。