R 跟进-从数据帧中随机取样行
我问了一个问题,关于从提供了解决方案的清单中取样的问题。这是后续行动 我的问题有两个步骤。我想从一个数据帧中抽取若干行(3),然后再抽取第一个样本中没有的第二个样本(1行)。R 跟进-从数据帧中随机取样行,r,dataframe,for-loop,sample,R,Dataframe,For Loop,Sample,我问了一个问题,关于从提供了解决方案的清单中取样的问题。这是后续行动 我的问题有两个步骤。我想从一个数据帧中抽取若干行(3),然后再抽取第一个样本中没有的第二个样本(1行)。 set.seed(42) df <- data.frame(matrix(rnorm(20), nrow=10)) ( samples <- sample(nrow(df), size = 4) ) # [1] 6 8 4 9 sample_1 <- df[ samples[-1], ] sample_2
set.seed(42)
df <- data.frame(matrix(rnorm(20), nrow=10))
( samples <- sample(nrow(df), size = 4) )
# [1] 6 8 4 9
sample_1 <- df[ samples[-1], ]
sample_2 <- df[ samples[1],,drop = FALSE ]
sample_1
# X1 X2
# 8 -0.09465904 -2.6564554
# 4 0.63286260 -0.2787888
# 9 2.01842371 -2.4404669
sample_2
# X1 X2
# 6 -0.1061245 0.6359504
set.seed(42)
df我们可以使用for
循环在每次迭代时更新数据集,同时返回
df1 <- df
sizevec <- c(3, 1)
lst1 <- vector('list', 2)
for(i in seq_along(lst1)) {
samples <- sample(nrow(df1), size = sizevec[i])
lst1[[i]] <- df1[samples,, drop = FALSE]
df1 <- df1[-samples,, drop = FALSE]
}
我们可以使用for
循环在每次迭代时更新数据集,同时返回
df1 <- df
sizevec <- c(3, 1)
lst1 <- vector('list', 2)
for(i in seq_along(lst1)) {
samples <- sample(nrow(df1), size = sizevec[i])
lst1[[i]] <- df1[samples,, drop = FALSE]
df1 <- df1[-samples,, drop = FALSE]
}
您可以通过对数据帧中的行进行采样并用3+1行从中生成一个矩阵来轻松实现这一点。如果nrow(df)%%4==0
由于循环而为FALSE
,则可能会在末尾产生重复项。我们可以通过将它们设置为NA
来消除重复的
set.seed(42)
m <- matrix(sample(1:nrow(df)), 4)
m[duplicated(as.vector(m))] <- NA
m
# [,1] [,2] [,3]
# [1,] 1 2 7
# [2,] 5 4 3
# [3,] 10 6 NA
# [4,] 8 9 NA
数据:
df您可以通过对数据帧中的行进行采样并用3+1行从中生成一个矩阵来轻松实现这一点。如果nrow(df)%%4==0
由于循环而为FALSE
,则可能会在末尾产生重复项。我们可以通过将它们设置为NA
来消除重复的
set.seed(42)
m <- matrix(sample(1:nrow(df)), 4)
m[duplicated(as.vector(m))] <- NA
m
# [,1] [,2] [,3]
# [1,] 1 2 7
# [2,] 5 4 3
# [3,] 10 6 NA
# [4,] 8 9 NA
数据:
df为什么要在循环中执行此操作?你想构建多对这样的数据帧吗?嗨,Ronak Shah,是的,这就是你的意图为什么你想在循环中这样做?你想构建多对这样的数据帧吗?嗨,Ronak Shah,是的,这就是目的谢谢jay.sf。这给了我所需要的。谢谢你!嗨@trix,很高兴听到这个消息。在这种情况下,你可以。谢谢你jay.sf。这给了我所需要的。谢谢你!嗨@trix,很高兴听到这个消息。在这种情况下,你可以。谢谢你。这个解决方案很有用。我很感激!谢谢你,阿克伦。这个解决方案很有用。我很感激!
df <- structure(list(X1 = c(1.37095844714667, -0.564698171396089, 0.363128411337339,
0.63286260496104, 0.404268323140999, -0.106124516091484, 1.51152199743894,
-0.0946590384130976, 2.01842371387704, -0.062714099052421), X2 = c(1.30486965422349,
2.28664539270111, -1.38886070111234, -0.278788766817371, -0.133321336393658,
0.635950398070074, -0.284252921416072, -2.65645542090478, -2.44046692857552,
1.32011334573019)), class = "data.frame", row.names = c(NA, -10L
))