R 跟进-从数据帧中随机取样行

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

我问了一个问题,关于从提供了解决方案的清单中取样的问题。这是后续行动

我的问题有两个步骤。我想从一个数据帧中抽取若干行(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 <- 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
))