我有一个数据帧,在前三行中有一些元数据,我需要跳过。但是,这样做也会影响值cols的名称。
该怎么办,以避免在excel上打开每个CSV并手动删除这些行?
这是在Excel中打开CSV时的外观:
在R中,我正在使用以下命令将其打开:
android_per <- fread("...\\Todas las adquisiciones de dispositivos de Versión de Android PE.csv",
skip = 3)
它看起来像这样:
更新1:
答案 0 :(得分:4)
与@ G5W相似的逻辑,但是我认为需要采取一个步骤,将2行中的头压缩为1。例如:
txt <- "Some, utter, rubbish,,
Even more rubbish,,,,
,,Col_3,Col_4,Col_5
Col_1,Col_2,,,
1,2,3,4,5
6,7,8,9,0"
## below line writes a file - uncomment if you're happy to do so
##cat(txt, file="testfile.csv", "\n")
header <- apply(read.csv("testfile.csv", nrows=2, skip=2, header=FALSE),
2, paste, collapse="")
read.csv("testfile.csv", skip=4, col.names=header, header=FALSE)
输出:
# Col_1 Col_2 Col_3 Col_4 Col_5
#1 1 2 3 4 5
#2 6 7 8 9 0
答案 1 :(得分:2)
这是一种方法。只需以文本行的形式读取文件。消除不需要的行,然后将其余的好部分读入data.frame。
示例csv文件(我将其保存为“ Temp / Temp.csv”)
Col_1,Col_2,Col_3,Col_4,Col_5
Some utter rubbish,,,,
Presumably documentation,,,,
1,2,3,4,5
6,7,8,9,0
代码
CSV_Lines = readLines("temp/Temp.csv")
CSV_Lines = CSV_Lines[-(2:3)]
DF = read.csv(text=CSV_Lines)
Col_1 Col_2 Col_3 Col_4 Col_5
1 1 2 3 4 5
2 6 7 8 9 0
它跳过了不需要的行并获得了列名。
答案 2 :(得分:1)
如果您使用skip = 3
,则肯定会丢失列名,而无权使用R将其取回。一个丑陋的破解方法可能是使用skip = 2
,这将确保除前两个是正确的。
df <- read.table('csv_name.csv', skip = 2, header = TRUE)
前两列的标题位于第一行,因此您可以这样做
names(df)[1:2] <- df[1, 1:2]
可能,您需要将所有行上移1步才能获得预期的数据帧。
答案 3 :(得分:0)
如果将Header设置为false,则可以使用以下代码:
df<-fread("~/Book1.csv", header = F, skip = 2)
shift_up <- function(x, n){
c(x[-(seq(n))], rep(NA, n))
}
df[1,1]<-df[2,1]
df[1,2]<-df[2,2]
df<-df[-2,]
names(df)<-as.character(df[1,])
df<-df[-1,]