假设我有一个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
等等。德国是最重要的,但美国和加拿大应该是。有什么想法可能会发生什么?
答案 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中查看已接受的答案。