我被要求创建一个具有三列(A,B,C和八行)的表。 A列必须变为1,1,1,1,2,2,2,2 B列必须交替为1,2,1,2,2,1,2,1,2并且C列必须变为1,1,2 ,2、1、1、2、2。我能够很好地产生A列数据,但是不知道如何获取B或C。这是我到目前为止的代码:
dataSheet <- matrix(nrow = 0, ncol = 3)
colnames(dataSheet) <- c('A', 'B', 'C')
A <- 1
B <- 1
C <- 1
for (A in 1:4){
A=1
dataSheet <- rbind(dataSheet, c(A, B, C))
}
for (A in 5:8){
A=2
dataSheet <- rbind(dataSheet, c(A, B, C))
}
答案 0 :(得分:1)
这似乎是熟悉rep()
函数的一个很好的借口,因为它很容易支持此问题,但如果您足够聪明,则还有许多更复杂的问题:
dt <- data.frame(A = rep(1:2, each = 4),
B = rep(1:2, times = 4),
C = rep(1:2, each = 2))
dt
#> A B C
#> 1 1 1 1
#> 2 1 2 1
#> 3 1 1 2
#> 4 1 2 2
#> 5 2 1 1
#> 6 2 2 1
#> 7 2 1 2
#> 8 2 2 2
由reprex package(v0.2.1)于2019-01-26创建
答案 1 :(得分:0)
为此任务只需使用R
的向量化即可,即
A <- c(1, 1, 1, 1, 2, 2, 2, 2)
B <- c(1, 2, 1, 2, 1, 2, 1, 2) # or rep(1:2, 4)
C <- c(1, 1, 2, 2, 1, 1, 2, 2)
cbind(A,B,C)
答案 2 :(得分:0)
也许您的教授可以接受以下内容。
for (i in 1:8){
A <- if(i <= 4) 1 else 2
B <- if(i %% 2) 1 else 2
C <- if(any(i %% 4 == c(0, 1, 4, 5))) 1 else 2
dataSheet <- rbind(dataSheet, c(A, B, C))
}
dataSheet
# A B C
#[1,] 1 1 1
#[2,] 1 2 2
#[3,] 1 1 2
#[4,] 1 2 1
#[5,] 2 1 1
#[6,] 2 2 2
#[7,] 2 1 2
#[8,] 2 2 1