R代码将数据拆分为相同大小的不同样本

时间:2016-05-05 10:06:05

标签: r statistics

我在编写正确的R代码时难以从数据集中获得4个相同大小的不同样本。

需要你的帮助!

谢谢和问候, Reelina

3 个答案:

答案 0 :(得分:1)

这实际上取决于你的目标是什么,你可能想在这里尝试。我假设给定一个数据帧,你想要创建四个相同大小的子集,其中每个子集是随机采样的四分之一数据。

出于演示目的,我使用了基本R中包含的Seatbelts数据,因为它的行数是4的倍数。此解决方案仅使用基本R函数。对于更复杂的数据帧操作,我建议查看dplyr包。

# use seat belts data as example as it has nrow(x) %% 4 == 0
data(Seatbelts)
# generate a random sample of numbers 1:4 such that each occurs equally
ind = sample(rep(1:4,each = nrow(Seatbelts)/4))
# you could add that as a column to your data frame allowing the groups to be
# specified in formulae etc
# or if you want the four subsets
lapply(split(1:nrow(Seatbelts),ind), function(i) Seatbelts[i,])

如果您的数据是矢量,则更容易

x = runif(24)
ind = sample(rep(1:4,each = length(x)/4))
split(x,ind)

如果您不想随机抽样,那么只需创建ind

ind = rep(1:4,each = length(x)/4)

以与以前相同的方式分裂。

你应该小心使用像cut这样的东西,因为这不会给你4个相同大小的子集。

table(as.numeric(cut(x,4)))

# 1 2 3 4 
# 7 6 3 8 

这是因为cut将x的范围缩小为间隔而不是它的长度。

答案 1 :(得分:0)

这种做法怎么样?

# Create data for example
x <- data.frame(id = 1:100, y = rnorm(100), z = rnorm(100))

# Returns a list with four equally sized distinct samples of the data
lapply(split(sample(nrow(x)), ceiling((1:nrow(x))/25)), function(i) x[i, ])

答案 2 :(得分:0)

可以使用cut命令:

x<-1:100
cutindex<-cut(x, breaks=4)

要重命名切割点,请使用“levels”命令:

levels(cutindex)<-c("A", "B", "C", "D")

一旦数据被删除,我建议使用dplyr包中的group_by命令进行其他分析。