R 带有 nrow 的样本选择基本问题



我按照一个教程将 ds 分成几个sample,它工作正常。我只是无法入睡而不了解幕后发生的事情ind数据集,如下面的示例所示,它是否以某种方式知道/记住mtcars,它只是单列整数。 我在评论中指出了我想要得到什么,R 如何知道数据集中标记为 1 或 2 的哪一行?

是的,我在基本语法上做了我的工作,但这可能太简单了)

ind <- sample(2,nrow(mtcars), replace= T, prob = c(0.8,0.2))
ind
tdata <- mtcars[ind==1,]  # select rows where ind = 1 ??!! but we don't have ind column in mtcars???
vdata <- mtcars[ind==2,]

在亚当的帮助下更新了我的解释。

  1. ind-- 具有单列 int 的独立独立 DS。 与mtcars没有任何逻辑关系。我测试了手动创建它,它工作正常。
  2. 然后它与逻辑向量一起工作,将 mtcars 中的 rownum 匹配到 ind。 像这样:让检查来自 mtcars 的行 #1 匹配(按 rownum) 来自 ind 的行 #1 的值为 1,因此 ind==1 转换为 True 并选择原始。

如果我错了,请纠正我。

(1)这个陈述是这样说的:"随机抽取数字1和2,以获得mtcars(32)中有多少行的总数,并且make使得1有80%的机会被选中,2有20%的机会被选中。

ind <- sample(2,nrow(mtcars), replace= T, prob = c(0.8,0.2))

(2) 此行代码仅对向量 (ind) 为 1 的那些行进行子集化mtcars。代码ind==1正在创建一个逻辑向量(即充满TRUEFALSE)值。哪里有1,哪里就有ind==1TRUE,否则就是FALSE

tdata <- mtcars[ind==1,]

(3)这行代码本质上与步骤2执行相同的操作,但是对于任何有2ind的地方。

vdata <- mtcars[ind==2,]

你的假设是正确的,可以简化你的代码以保持要点:

ind <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2)
tdata <- mtcars[ind==1,]    ## tota32 rows in mtcars 

再。<将 mtcars=" 子集化为仅向量=" 为=" _x0031_=">(c) 的行 这听起来很奇怪,但确实如此:从 A 中选择所有对象,其中 B=1,其中 A 和 B 是不同的对象,它们之间没有任何关系。它适用于每一行,但不要求 A 和 B 具有相同的行号。

最新更新