删除R数据表中重复的标题行的更简单方法

时间:2018-07-14 17:20:05

标签: r dplyr row

我有一个df,每12行重复标题行,这是ESPN网站上刮擦MLB投球统计数据的遗留物。我知道我可以像这样简单地删除它们:

12  RK  PLAYER  TEAM GP GS IP H R ER BB SO W L  SV  BLSV WAR WHIP ERA
...
24  RK  PlAYER  etc...

df <- df[c(-12, -24, -36, -48, -etc), ]

这似乎效率很低,因为我的df长超过一千行。如何删除这些标题行,而不必键入从12到Timbuktu的每个数字?

2 个答案:

答案 0 :(得分:4)

使用seq创建一个序列,并使用该序列删除行

df[-seq(12, nrow(df), by = 12),] 

如果它是data.table对象,则不需要,

library(data.table)
df[-seq(12, .N, by = 12)]

或使用dplyr

library(dplyr)
df %>% 
   slice(-seq(12, n(), by = 12))

基于OP的注释,目的是删除从here读取的数据中的重复标题。

删除RK列值为“ RK”的行(指定标题行)

df <- df[df$RK != "RK",] 

然后更改列的type

df[] <- lapply(df, function(x) type.convert(as.character(x), as.is = TRUE))

答案 1 :(得分:3)

一个选项是在除以remainder之后检查12。排除remainder0的行:

df[(1:nrow(df) %% 12) !=0,]

对于data.table,可以将.I用作:

df[df[,(.I %% 12 != 0)]]

它如何工作?说,您的data.frame得到了36行:

(1:36 %% 12) != 0

# [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [12] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [23]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [34]  TRUE  TRUE FALSE

请注意,12th24th36thFALSE。因此,这些行将被排除。