扩展a-z到abc的方法…

  • 本文关键字:方法 abc a-z 扩展 r
  • 更新时间 :
  • 英文 :


嗨:)我想做的是写一个简单的程序,从最短的条目展开

例如

a - z

to longest write

例如

abcdefghijklmnouprstwxyz

关于如何在R中实现它有什么想法吗?由于

我们可以做

paste(letters[do.call(`:`, as.list(match( strsplit(str1, "-")[[1]], 
letters)))], collapse="")
[1] "abcdefghijklmnopqrstuvwxyz"

以上内容可以封装在函数

f1 <- function(string1) {
paste(letters[do.call(`:`, as.list(match( strsplit(string1, "-")[[1]], 
letters)))], collapse="")
}
使用新数据
i1 <- grep('-', df$letters)
df$letters[i1] <- sapply(df$letters[i1], f1)
df$letters
[1] "abc"  "bcd"  "cd"   "abcd" "ab"   "cd"  

或者使用regex

paste(grep(sprintf('[%s]', str1), letters, value = TRUE), collapse="")

基于新数据集

library(dplyr)
library(tidyr)
library(stringr)
df %>% 
separate(letters, into = c('start', 'end'), 
sep="(?<=[a-z])-?(?=[a-z])") %>% 
transmute(new = map2_chr(match(start, letters),
match(end, letters), ~ str_c(letters[.x:.y], collapse="")))

与产出

new
1  abc
2  bcd
3   cd
4 abcd
5   ab
6   cd

数据
str1 <- "a-z"
df<-data.frame(letters=c("a-c","b-d","c-d","a-d", "ab", "cd")) 

最新更新