前几天我发布了一个问题并意识到我没有很好地阐述我的问题。所以我把它清理干净了,简化了。
"@realdonaldtrump","19301000","19300609","Jody"
"@realdonaldtrump","1350700000","1350725479","Bobby
Fischer"
"@realdonaldtrump","870440000","870442502","Lenny"
Phone</a>"
"@realdonaldtrump","4831200000","4831194209","Tom"
"@realdonaldtrump","4.397e+09","4397021841","Dave"
"@realdonaldtrump", "12345678","9012345678", "Zee
G
Zeek"
我的CSV数据存在一些问题。我需要清理它,以便我可以用R读它。
我期待的是6个条目,每个Jody,Bobby Fischer,Lenny,Tom和Dave,Zee G Zeek。
然而,那个讨厌的手机“神器搞砸了。
所以我的第一个想法是gsub出来。问题是,该工件在数百万条目中有所不同。有时它的电话“。有时它的Eck”。有时它的Twitter“。各种长度。各种格式。
另一个问题是,对于像“Bobby Fischer”这样的事情,上面的一行可能在重要字段的中间有一个\ r \ n。我不想失去这些界限。
是否存在清除这些有问题的线路的清晰方法,同时不会破坏刚刚延伸下来的有益线路?
答案 0 :(得分:1)
您可能需要尝试 data.table 包中的fread
函数,该函数包含fill
个参数。通过将此参数设置为TRUE
,您将为最终要删除的 pesky 案例创建单独的行,同时保留内部带有\r\n
的字段。
假设数据位于twit.csv
:
library(data.table)
twit <- fread('twit.csv', fill=TRUE, header=FALSE)
会给:
> twit
V1 V2 V3 V4
1: @realdonaldtrump 19301000 19300609 Jody
2: @realdonaldtrump 1350700000 1350725479 Bobby\nFischer
3: @realdonaldtrump 870440000 870442502 Lenny
4: Phone</a>"
5: @realdonaldtrump 4831200000 4831194209 Tom
6: @realdonaldtrump 4.397e+09 4397021841 Dave
7: @realdonaldtrump 12345678 9012345678 Zee\nG\n\nZeek
接下来,您可以使用grep
过滤掉所需的值:
twit[grep('^@', V1)]
会给你:
V1 V2 V3 V4
1: @realdonaldtrump 19301000 19300609 Jody
2: @realdonaldtrump 1350700000 1350725479 Bobby\nFischer
3: @realdonaldtrump 870440000 870442502 Lenny
4: @realdonaldtrump 4831200000 4831194209 Tom
5: @realdonaldtrump 4.397e+09 4397021841 Dave
6: @realdonaldtrump 12345678 9012345678 Zee\nG\n\nZeek
答案 1 :(得分:0)
在最后一行用"
关闭时,您需要搜索不以"
开头的行。
搜索
\"\r\n[^\"]+\"
将其替换为
\"\r\n