我对超级基本REGEX代码做错了什么?

时间:2018-04-20 20:39:02

标签: r regex

假设我有一个CSV文件(标题为" 2014年的女性物质相关死亡和#34;)的一堆数据看起来像(请记住这是一个CSV文件,只是一个小样本,并且它还有数据,因此数字不是真实的:

Substance Related Deaths
of Females
by country             
2014
Country                 pregnant status     alcohol    opiates    heroin
USA                     pregnant            1,230      4,844      893
                        not pregnant        23,440     12,773     2,005
CANADA                  pregnant            1,094      735        804
                        not pregnant        18,661     5,787      1,050
GERMANY                 pregnant            444        97         203
                        not pregnant        1,007      388        1,375
MEXICO                  pregnant            786        1,456      1,532
                        not pregnant        20,562     2,645      7,594

原始CSV文件包含30行(包括我们不想在顶部和底部填充的内容)和8列。

现在假设我只想保留每行开头的所有行,其中包含大写字母的国家/地区(换句话说,我只想要列出国家/地区的行,而只需要"怀孕"数据)。这就是我的所作所为:

df <- readLines("substancedeaths.csv")
linesTOkeep <- grep("^[A-Z]",df)
mydata <- df[linesTOkeep]
finaltable <- read.table(textConnection(mydata),sep=",")

原始数据有10个国家,有8列(第一列是&#34;州&#34;其余是物质)。最终目标是拥有一个包含10行和8列的数据框。但在运行我的代码后,我最终只有8行和8列,它省略了美国和加拿大的行,看起来像这样:

GERMANY                 pregnant            444        97         203
MEXICO                  pregnant            786        1,456      1,532

等等。德国是最重要的,但美国和加拿大应该是。有什么想法可能会发生什么?

1 个答案:

答案 0 :(得分:0)

以下内容如何:

linesTOkeep <- grep("^[[:upper:]]{3}", df)

mydata <- df[linesTOkeep]

finaltable <- as.data.frame(do.call(rbind, strsplit(mydata, split=" {2,10}")), stringsAsFactors=FALSE)

names(finaltable) <- c("Country", "pregnant_status", "alcohol", "opiates", "heroin")

第三条线完成了繁重的工作。您可以在this post中查看已接受的答案。