我在列表中有以下内容
"[4] {PIVOTAL GEMFIRE} => {HIBERNATE} 0.005952381 1.0000000 168.000000 2 \r"
我需要得到它:
4,{PIVOTAL GEMFIRE},{HIBERNATE},0.005952381,1.0000000,168.000000,2
我需要将它按行放在数据框中
答案 0 :(得分:2)
你可以做(string
作为你的字符串):
gsub("((\\S+)|(\\{[^{}]+\\}))\\s", "\\1,", trimws(gsub("[^[:alnum:].{}]+", " ", string)))
<强>解释强>
gsub("[^[:alnum:].{}]+", " ", string)
:用空格替换不是字母数字字符或大括号或点(并且可以多次出现)的所有内容trimws(...)
:从刚刚修改过的字符串中删除前导空格和尾随空格gsub("((\\S+)|(\\{[^{}]+\\}))\\s", "\\1",...)
:在前一个结果中,捕获空间之前的所有内容,由非空格或大括号之间的任何内容组成,然后放一个逗号。然后,您可以使用read.table
读取向量,并使用sep=","
放入data.frame
<强>测试强>
string <- "[4] {PIVOTAL GEMFIRE} => {HIBERNATE} 0.005952381 1.0000000 168.000000 2 \r"
read.table(text=gsub("((\\S+)|(\\{[^{}]+\\}))\\s", "\\1,", trimws(gsub("[^[:alnum:].{}]+", " ", string))), sep=",")
# V1 V2 V3 V4 V5 V6 V7
#1 4 {PIVOTAL GEMFIRE} {HIBERNATE} 0.005952381 1 168 2
答案 1 :(得分:1)
将每个=>
,[
和]
替换为带有s1
的空字符串,然后替换任何数字或}
后跟空格的相同数字或}
后跟逗号。然后使用逗号作为分隔符读取它。如果逗号可以出现在内容中,则使用不同的分隔符。
s1 <- gsub("=>|[][]", "", DF$x)
s2 <- gsub("([0-9}]) ", "\\1,", s1)
read.table(text = s2, as.is = TRUE, strip.white = TRUE, sep = ",")[-8]
,并提供:
V1 V2 V3 V4 V5 V6 V7
1 4 {PIVOTAL GEMFIRE} {HIBERNATE} 0.005952381 1 168 2
2 4 {PIVOTAL GEMFIRE} {HIBERNATE} 0.005952381 1 168 2
使用的测试数据:
x <- "[4] {PIVOTAL GEMFIRE} => {HIBERNATE} 0.005952381 1.0000000 168.000000 2 \r"
DF <- data.frame(x = c(x, x), stringsAsFactors = FALSE)
编辑:添加了遗失}
。