我有像这样的角色载体
sol=c("119","911","*","ab","ba","*","*","abcd","bcda","abcd","cdab","abcd","dabc","*","*","*","*")
我想一次采用一个向量并产生如下输出。
最快的方法是什么?基本上,我想在有*的地方开始新的一行。如果有连续*那么我只想要一个新线。连续的非*元素应该打印在一个新行上,如果是连续的非*元素,如果有任何重复元素则不应该打印
119 911
ab ba
abcd bcda cdab dabc
我正在考虑编写for循环和打印元素,直到遇到*。但不确定如何确保如何处理连续*以生成单个新行,也不确定如何从连续的非*元素列表中删除重复元素
答案 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"