跳过行摆脱必要的姓氏?

时间:2020-05-13 23:59:53

标签: r data.table tidyverse

我有一个数据帧,在前三行中有一些元数据,我需要跳过。但是,这样做也会影响值cols的名称。

该怎么办,以避免在excel上打开每个CSV并手动删除这些行?

这是在Excel中打开CSV时的外观:

enter image description here

在R中,我正在使用以下命令将其打开:

android_per <- fread("...\\Todas las adquisiciones de dispositivos de Versión de Android PE.csv",
                     skip = 3)

它看起来像这样:

enter image description here

更新1:

enter image description here

4 个答案:

答案 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,]