嗨:)我想做的是写一个简单的程序,从最短的条目展开
例如
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"))