操纵字符串R以产生特定输出

时间:2015-02-23 01:18:49

标签: r string

我有像这样的角色载体

sol=c("119","911","*","ab","ba","*","*","abcd","bcda","abcd","cdab","abcd","dabc","*","*","*","*")

我想一次采用一个向量并产生如下输出。

最快的方法是什么?基本上,我想在有*的地方开始新的一行。如果有连续*那么我只想要一个新线。连续的非*元素应该打印在一个新行上,如果是连续的非*元素,如果有任何重复元素则不应该打印

119 911
ab ba
abcd bcda cdab dabc

我正在考虑编写for循环和打印元素,直到遇到*。但不确定如何确保如何处理连续*以生成单个新行,也不确定如何从连续的非*元素列表中删除重复元素

2 个答案:

答案 0 :(得分:2)

以下是cumsum根据*匹配案例的尝试:

lapply(split(sol[sol!="*"],cumsum(sol=="*")[sol!="*"]),unique)
#$`0`
#[1] "119" "911"
# 
#$`1`
#[1] "ab" "ba"
#
#$`3`
#[1] "abcd" "bcda" "cdab" "dabc"

然后您可以使用:R: Print list to a text file

将其写入文本文件

答案 1 :(得分:1)

您可以尝试下面的内容,

> print(gsub("(?:\\s*\\*)+\\s*", "\\\n", paste(sol, collapse=" ")))
[1] "119 911\nab ba\nabcd bcda abcd cdab abcd dabc\n"