【问题标题】:method for expand a-z to abc...xyz form R将 a-z 扩展为 abc...xyz 形式 R 的方法
【发布时间】:2021-09-12 18:43:06
【问题描述】:

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

例如

a-z

最长写入

例如

abcdefghijklmnouprstwxyz

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

【问题讨论】:

标签: r


【解决方案1】:

我们可以做

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")) 

【讨论】:

  • 您将如何在如下数据集中处理相同的问题? df
  • @ViniciusGarnica 你下面提到的数据集在哪里
  • @ViniciusGarnica 在某些元素中没有-?是不是笔误
  • @ViniciusGarnica 已经更新了答案。我使用了 tidyverse。但是,如果我们使用 lapply/sapply 循环并应用函数 f1,另一个应该也可以工作。我认为基于模式你只需要循环- 存在的地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多