从R中每行的唯一代码中提取特定字母,仅使用tidyverse
我试图从每一行的唯一代码中提取最后的数字。我不知道如何在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,
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,因为他是第一个,他也是新的堆栈溢出,事实上它起了作用。另外,我想鼓励他,因为他是新来的。不过,我感谢你的意见。谢谢。是的,我想这对第一个回答的人是公平的。非常感谢。您的应用程序非常好,因为它适用于许多其他问题!是 啊这是我的荣幸!我们有很多解决方案。只要用对你最好的东西。