对于 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
因为 R
从 1
索引而不是 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
有没有人有想法在 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
因为 R
从 1
索引而不是 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