拆分R中列表中的内容

时间:2018-02-13 13:26:45

标签: r regex strsplit

我在列表中有以下内容

"[4]  {PIVOTAL GEMFIRE}                             => {HIBERNATE}                    0.005952381 1.0000000  168.000000 2    \r"

我需要得到它:

 4,{PIVOTAL GEMFIRE},{HIBERNATE},0.005952381,1.0000000,168.000000,2

我需要将它按行放在数据框中

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)

编辑:添加了遗失}