r语言 - 我如何将一个数据帧分成两个相等的部分?



如何在R中使用基函数将data.frame分成两个相等的部分?

第二个data.frame如果有奇数将得到额外的行

index <- seq.int(nrow(df) / 2)
df[index, ]
df[-index, ]

如果您想更改拆分方式,可以轻松扩展。例如,要使用sample().

随机绘制行。
index <- sample(seq.int(nrow(df)), nrow(df) / 2)

下面的代码将在R中使用基函数将data.frame分成相等的两部分

# Where df is your data frame
n<-nrow(df)/2
n1<-(nrow(df)/2)+1
n2<-nrow(df)
df1<-df[1:n,]
df2<-df[n1:n2,]
rm(n,
n1,
n2)

这不会按任何特定标准对数据进行排序,也不会按行号随机拆分。如果你需要分割你的数据(例如,进入一个派生和验证队列),并且确信数据不会以一种会破坏你的分析的方式系统地按行排列,它是有用的。

另一个base选项:

n <- nrow(data)/2
n_rows <- nrow(data)
split(data, 
rep(1:ceiling(n_rows/n), 
each=n, 
length.out=n_rows))

输出:

$`1`
v1 v2
1  A  1
2  A  2
$`2`
v1 v2
3  B  3
4  B  4

数据
data <- data.frame(v1 = c("A", "A", "B", "B"),
v2 = c(1,2,3,4))

可以用split()+cut()

split(data, cut(1:nrow(data), 2, labels = FALSE))

split(sleep, cut(1:nrow(sleep), 2, labels = FALSE))
$`1`
extra group ID
1    0.7     1  1
2   -1.6     1  2
3   -0.2     1  3
4   -1.2     1  4
5   -0.1     1  5
6    3.4     1  6
7    3.7     1  7
8    0.8     1  8
9    0.0     1  9
10   2.0     1 10
$`2`
extra group ID
11   1.9     2  1
12   0.8     2  2
13   1.1     2  3
14   0.1     2  4
15  -0.1     2  5
16   4.4     2  6
17   5.5     2  7
18   1.6     2  8
19   4.6     2  9
20   3.4     2 10

最新更新