【发布时间】:2021-09-12 18:43:06
【问题描述】:
嗨:) 我想做的是编写一个简单的程序来从最短的条目扩展
例如
a-z
最长写入
例如
abcdefghijklmnouprstwxyz
关于如何在 R 中实现它的任何想法?谢谢
【问题讨论】:
-
我认为这应该给你一些想法。 stackoverflow.com/questions/53476833/… 的可能重复项
标签: r
嗨:) 我想做的是编写一个简单的程序来从最短的条目扩展
例如
a-z
最长写入
例如
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"))
【讨论】:
-?是不是笔误
- 存在的地方