对于 R 中随机变量不同 person_id 的循环

For loop with random variables different person_id in R

有没有人有想法在 R 中创建“FOR”循环,将所有变量选择重复 n 次,唯一改变的是人类 ID(在 16384 行之后,人类 ID = 1,再加上另外 16384 行应该与人性化 = 2)。 我尝试创建新的数据框 a$humanid<-rep(2,nrow(a)) 并合并两个表,但这很愚蠢,因为我需要 100 个具有相同变量和不同选择的人。

这是我的代码,用于 humanid=1 的变量:

a<-expand.grid(price75 = seq(1,0), price100 = seq(1,0),
               price125 = seq(1,0), fuel5 = seq(1,0), fuel15 = seq(1,0),
               fuel25 = seq(1,0), co2_50 = seq(1,0), co2_75 = seq(1,0),
               co2_100 = seq(1,0), range400 = seq(1,0), range700 = seq(1,0),
               range1000 = seq(1,0), avail60 = seq(1,0), avail100 = seq(1,0))
a$humanid<-rep(1,nrow(a)) 

a$choice<-rep(0,nrow(a))
a$choice <- `[<-`(integer(length(a$choice)), sample(length(a$choice), 1), 1)
a$alt <- 1:nrow(a) 

提前致谢。

嗯..假设有m“真实”行,你想复制最多n行(所以假设m <= n;然后你可以做模运算:

m <- 10
n <- 25

(seq_len(n) - 1) %% 10 + 1
 [1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4
[15]  5  6  7  8  9 10  1  2  3  4  5

你需要 -1+1 因为 R1 索引而不是 0.

如果我正确理解问题,则不需要 for 循环。将 humanid 添加到 expand.grid,然后为每个 ID 取一个行样本,然后抵消这些样本以获得正确的 2^14 行集合。

a<-expand.grid(price75 = seq(1,0), price100 = seq(1,0),
               price125 = seq(1,0), fuel5 = seq(1,0), fuel15 = seq(1,0),
               fuel25 = seq(1,0), co2_50 = seq(1,0), co2_75 = seq(1,0),
               co2_100 = seq(1,0), range400 = seq(1,0), range700 = seq(1,0),
               range1000 = seq(1,0), avail60 = seq(1,0), avail100 = seq(1,0),
               humanid = 1:100, choice = 0)
a$choice[sample(2^14, 100, TRUE) + (0:99)*2^14] <- 1