Срез 2-й половины фрейма данных в R - PullRequest
0 голосов
/ 09 октября 2018

Я могу легко нарезать первую половину (или любой другой процент) фрейма данных, используя:

library(dplyr)    

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

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

Однако как я могу нарезать 2-ю половину моего фрейма данных?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Вы также можете просто немного изменить аргумент 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()))

, если нечетное количество строк - вы будетенужно выбрать, как поступить со средним рядом.

0 голосов
/ 09 октября 2018

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()))
0 голосов
/ 09 октября 2018

с отрицательными показателями

library(dplyr)    

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

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