在R中将数据帧的后一半切片

时间:2018-10-09 19:29:30

标签: r dplyr tidyverse

我可以轻松地使用以下方法对数据帧的前一半(或其他百分比)进行切片:

library(dplyr)    

df <- data.frame(x = 1:10)

df %>% 
  slice(seq(0.5 * n()))

但是,如何分割数据帧的后半部分?

3 个答案:

答案 0 :(得分:4)

带有负索引

library(dplyr)    

df <- data.frame(x = 1:10)

df %>% 
  slice(-seq(0.5 * n()))

答案 1 :(得分:2)

您还可以稍微修改seq参数:

df <- data.frame(x = 1:10)

df %>% 
  slice(seq(n() * 0.5, n()))

根据@Kerry Jackson的建议进行更新:

df %>% 
  slice(seq(floor(n() * 0.5) + 1, n()))

如果行数奇数-您需要选择如何处理中间行。

答案 2 :(得分:2)

slice()可以做两件事:如果给它正数,则保留行;如果给负数,则保留行。您可以使用其中任何一个来获取数据帧的后半部分:

# Keeping later rows
df %>% slice(seq(n()/2, n()))

# Dropping earlier rows
df %>% slice(-seq(1, n()/2))

如果行数为奇数,则需要小心,因为在这些情况下n()/2不会是整数。在您的示例中使用seq(0.5 * n())也会遇到此问题。为了安全起见,您可以明确说明如何使用floor()ceiling()处理中间情况:

df <- data.frame(x = 1:11)

# Include row 5
df %>% slice(seq(floor(n()/2), n()))

# Exclude row 5
df %>% slice(seq(ceiling(n()/2), n()))