我想我并不是在问正确的问题。
新问题:
我有一个1.5gig的tsv文件。它的顶部有6行垃圾内容,底部有1行垃圾内容,我都想删除这些文件而不必打开文件。第7行是标题。我有13个标题。行数未知。
我如何将文件读入数据框中,以便进行基本的描述性统计,箱线图绘制等。
原始问题:
你好
我觉得这真的很容易。我只是想念一些东西。
我有一个txt文件,用制表符分隔,顶部有6行垃圾,底部也有垃圾行。
在垃圾之间,我有表格数据
标签1标签2标签3标签4 ....标签13
文本ID号%.... number
这是我在R中输入的内容:
datadump <- read.delim2("truncate.txt", header=TRUE, skip="6")
cleandata <- datadump[c(-dim(datadump)[1]),]
avgposition <- cleandata$Avg.Position
hist(avgposition)
Avg.Position是label13,且格式为#。#
但是我得到一个错误:
hist.default(avgposition)中的错误:“x”必须为数字
为什么看不到数据为数字?
谢谢!
根据要求,这里是一些数据:
> dput(cleandata)
structure(list(Account = structure(c(2L, 2L), .Label = c("Crap1",
"XXS"), class = "factor"), Campaign = structure(c(1L, 1L), .Label = c("3098012",
"Crap2"), class = "factor"), Customer.Id = structure(c(2L, 2L
), .Label = c("", "nontech broad (7)"), class = "factor"), Ad.Group = structure(c(2L,
2L), .Label = c("", "RR 236 (300)"), class = "factor"), Keyword = structure(2:3, .Label = c("",
"chagall pro", "matisse"), class = "factor"), Keyword.Matching = structure(c(2L,
2L), .Label = c("", "Broad"), class = "factor"), Impressions = c(4L,
16L), Clicks = c(1L, 1L), CTR = structure(2:3, .Label = c("",
"25.00%", "6.25%"), class = "factor"), Avg.CPC = structure(2:3, .Label = c("",
"$0.05 ", "$0.11 "), class = "factor"), Avg.CPM = structure(2:3, .Label = c("",
"$12.50 ", "$6.88 "), class = "factor"), Cost = structure(2:3, .Label = c("",
"$0.05 ", "$0.11 "), class = "factor"), Avg.Position = structure(2:3, .Label = c("",
"3", "3.1"), class = "factor")), .Names = c("Account", "Campaign",
"Customer.Id", "Ad.Group", "Keyword", "Keyword.Matching", "Impressions",
"Clicks", "CTR", "Avg.CPC", "Avg.CPM", "Cost", "Avg.Position"
), row.names = 1:2, class = "data.frame")
最佳答案
当我不得不从同事那里获取凌乱的excel文件时,这在我身上经常发生。基本上,我在数据框中得到了空白的“”字符。我通常只是通过将它们重新编码为NA来修复它,然后再告诉它为as.numeric。
df[df==""] <- NA ## Recodes all "" as NA
df$Avg.Position <- as.numeric(df$Avg.Position)
df$some.other.var <- as.numeric(df$some.other.var)
如果Avg.Position中还有其他字符串,则也需要搜索并销毁它们。除非确定所有奇怪的事物都消失了,否则不要使用as.numeric()进行替换。否则,您的数据可能会发生奇怪的事情。
另外,您也可以在一开始就这样做:
datadump <- read.delim2("truncate.txt", na.strings=c("NA",""), header=TRUE, skip="6", )
na.strings=c("NA","")
告诉read.table,“NA”和“”是== NA,您也可以使用它将其他“垃圾”也转换为NA。如果您知道在文件末尾有垃圾行的行数,则还可以使用nrows = SOME_NUMBER。
您可能也希望摆脱$符号,因为它们会导致平均CPC / CPM /费用转换为因子,这也需要时间/内存。可能有一种方法可以从您的来源进行。 (看起来像是从网络分析软件下载的文件,但我无法确定-自从完成网络分析以来已经很长时间了)