Regex 如何从R中的csv数据中删除[1]s、[1]]s和双引号?
我有一个CSV文件。它包含以前的一些R操作的输出,因此它用索引号填充(例如[1],[1]])。当读入R时,它看起来像这样,例如: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
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的初学者。我也会看看这个并学习。非常感谢你。