Как создать простую таблицу в R, используя для циклов? - PullRequest
0 голосов
/ 27 января 2019

Меня попросили создать таблицу с тремя столбцами, A, B и C и восемью строками. Столбец A должен идти 1, 1, 1, 1, 2, 2, 2, 2. Столбец B должен чередоваться 1, 2, 1, 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)) 
}

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Это хороший повод для ознакомления с функцией 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

Созданона 2019-01-26 представьте пакет (v0.2.1)

0 голосов
/ 27 января 2019

Возможно, что-то вроде следующего будет приемлемо для вашего профессора.

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
0 голосов
/ 27 января 2019

Просто используйте векторизацию 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)
...