Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何从R中的csv数据中删除[1]s、[1]]s和双引号?_Regex_R_Csv_Format_Read.csv - Fatal编程技术网

Regex 如何从R中的csv数据中删除[1]s、[1]]s和双引号?

Regex 如何从R中的csv数据中删除[1]s、[1]]s和双引号?,regex,r,csv,format,read.csv,Regex,R,Csv,Format,Read.csv,我有一个CSV文件。它包含以前的一些R操作的输出,因此它用索引号填充(例如[1],[1]])。当读入R时,它看起来像这样,例如: V1 1 [1] 789 2

我有一个CSV文件。它包含以前的一些R操作的输出,因此它用索引号填充(例如[1],[1]])。当读入R时,它看起来像这样,例如:

        V1
1                                                                                                           [1] 789
2                                                                                                             [[1]]
3                                                           [1] "PNG"        "D115"    "DX06"    "Slz"
4                                                                                                           [1] 787
5                                                                                                             [[1]]
6                                                                       [1] "D010"           "HC"
7                                                                                                           [1] 949
8                                                                                                             [[1]]
9                                                                       [1] "HC" "DX06"          
(我不知道为什么行号和输出数据之间会浪费这么多空间)

我需要将上述数据显示如下(不带[1]或[[1]]或“”,并将数据放在相应的数字旁边,如):

(可能,
789
及其相应的数据
PNG、D115、DX06、Slz
应该用制表符分隔。每行都应该这样)


如何在R中实现这一点?

我们可以创建一个分组变量('indx'),
split
在删除开头的括号部分以及字符串中的引号后,使用分组索引对“V1”列进行拆分
。假设我们需要第一列作为数字元素,第二列作为非数字部分,我们可以使用regex将空格替换为
(如预期结果所示,然后使用
rbind
列表元素)

indx <- cumsum(c(grepl('\\[\\[', df1$V1)[-1], FALSE))
 do.call(rbind,lapply(split(gsub('"|^.*\\]', '', df1$V1), indx),
         function(x) data.frame(ind=x[1],
    val=gsub('\\s+', ',', gsub('^\\s+|\\s+$', '',x[-1][x[-1]!=''])))))

 #   ind               val
 #1  789 PNG,D115,DX06,Slz
 #2  787           D010,HC
 #3  949           HC,DX06

indx我们可以创建一个分组变量('indx'),
split
在删除开头的括号部分以及字符串中的引号后,使用分组索引来创建“V1”列
。假设我们需要第一列作为数字元素,第二列作为非数字部分,我们可以使用regex将空格替换为
(如预期结果所示,然后使用
rbind
列表元素

indx <- cumsum(c(grepl('\\[\\[', df1$V1)[-1], FALSE))
 do.call(rbind,lapply(split(gsub('"|^.*\\]', '', df1$V1), indx),
         function(x) data.frame(ind=x[1],
    val=gsub('\\s+', ',', gsub('^\\s+|\\s+$', '',x[-1][x[-1]!=''])))))

 #   ind               val
 #1  789 PNG,D115,DX06,Slz
 #2  787           D010,HC
 #3  949           HC,DX06

indx老实说,使用sed/perl/egrep-o的命令行修复程序不那么麻烦:

sed -e 's/.*\][ \t]*//' dirty.csv > clean.csv 

老实说,使用sed/perl/egrep-o的命令行修复程序没有那么麻烦:

sed -e 's/.*\][ \t]*//' dirty.csv > clean.csv 

这是一个好问题。修复创建此文件的数据导出会更好(更容易)。这是一个好问题。修复创建此文件的数据导出会更好(更容易)。这是一个极好的代码(尽管对于像我这样的初学者来说相当复杂),我们将进一步研究它。非常感谢:)这是一个非常棒的代码(虽然对于像我这样的初学者来说相当复杂),我们将进一步研究它。非常感谢:)谢谢你指出一个替代方案。。我是R的初学者。我也会看看这个并学习。非常感谢。谢谢你指出了一个替代方案。。我是R的初学者。我也会看看这个并学习。非常感谢你。