我在编写正确的R代码时难以从数据集中获得4个相同大小的不同样本。
需要你的帮助!
谢谢和问候, Reelina
答案 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命令进行其他分析。