如何根据索引号对数据帧进行子集化?

时间:2019-02-09 15:34:42

标签: r

首先,我是新手。一直在寻找答案,却找不到。

所以我有一个50k +行的数据框。我想做的是创建两个新的数据帧:一个在原始数据帧中具有行0:28120,另一个在其余数据中。

有人知道该怎么做吗?

我尝试执行以下操作:

df.tory <-df [c(0:28120),]

df.labour <-df [c(28121:53814),]

它创建了新的数据框,但是当我汇总新数据框的数据时,所有行都被包括在内(本不该显示的行的值显示为0)

3 个答案:

答案 0 :(得分:0)

首先,请注意R中的索引以1开头,而不是0。请尝试以下操作:

inds1 <- 1:28120

然后找到其余的:

inds2 <- setdiff(inds1, 1:nrow(df))

然后可以将两个数据框定义为:

df1 <- df[inds1, ]
df2 <- df[inds2, ]

答案 1 :(得分:0)

您应该在设置子集时直接使用范围,例如

cutoff <- 28120
df.tory <- df[1:cutoff, ]
df.labour <- df[(cutoff+1):nrow(df), ]

答案 2 :(得分:0)

您可以使用slice中的tidyverse来按索引选择所需的行。

df1 <- df %>% 
  slice(1:28120)

df2 <- df %>% 
  slice(28121:53814)

或者对于后者,您可以使用

df2 <- df %>%
  slice(28121:n())

指定所有剩余的行。