首页 > 解决方案 > 将 az 扩展为 abc...xyz 形式 R 的方法

问题描述

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

例如

阿兹

最长写

例如

abcdefghijklmnouprstwxyz

关于如何在 R 中实现它的任何想法?谢谢

标签: 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")) 

推荐阅读