В R создайте таблицу данных с X испытаний, Y повторений и Z графиков - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь создать таблицу данных с 3 векторами. Где вектор A Trial = [a,b,c...n], вектор B rep = [1,2,3,...,n] и вектор C plot = [r01, r02, r03,...,n], где r = "rep" (повторяется)

Пример:

> trial <- c("a", "b", "c")
> plot <- c(101:103,201:203,301:303)
> rep <- c(1,2,3)
> trial
[1] "a" "b" "c"
> plot
[1] 101 102 103 201 202 203 301 302 303
> rep
[1] 1 2 3
> dt <- data.table(trial,plot,rep)
> dt
   trial plot rep
1:     a  101   1
2:     b  102   2
3:     c  103   3
4:     a  201   1
5:     b  202   2
6:     c  203   3
7:     a  301   1
8:     b  302   2
9:     c  303   3
> dt <- data.table(trial,rep,plot)
> dt
   trial rep plot
1:     a   1  101
2:     b   2  102
3:     c   3  103
4:     a   1  201
5:     b   2  202
6:     c   3  203
7:     a   1  301
8:     b   2  302
9:     c   3  303

Ни то, ни другое совершенно правильно.

Я хочу, чтобы rep увеличил график на 100 x rep + plot #.

Для испытания (x): представитель 1, участок 1 -> 101

Для испытания (x): представитель 1, участок 2 -> 102

Для испытания (x ): повтор 2, сюжет 1 -> 201

Для испытания (x): представитель 2, сюжет 2 -> 202

и др. c.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Спасибо за помощь. Следующее позволяет мне динамически редактировать все части df.

Мне удалось решить проблему с кодом, предоставленным всеми. Я не знаю, кому отдать должное.

Спасибо всем!

loc <- c("Orchard", "Roggen", "Yuma", "Walsh", "Akron", "Julesburg", "Arapahoe", "Genoa", "Burlington", "Lamar", "Brandon")

i <- loc

rep <- 3 ## num reps

j <- seq(rep)

plot <- 5## plots

k <- seq(plot)

df <- data.frame(loc = i, block = rep(j, each = length(loc)), plot=rep(k, length(i)*rep))
0 голосов
/ 18 января 2020

Кажется, проблема в том, чтобы применить функцию к векторам rep и plot в правильном порядке. outer хороший кандидат для ее решения.

library(data.table)

trial <- c("a", "b", "c")
plot <- 1:3
rep <- 1:3

f <- function(r, p) 100*r + p
as.vector(t(outer(rep, plot, f)))
#[1] 101 102 103 201 202 203 301 302 303

dt <- data.table(trial, rep, plot = as.vector(outer(rep, plot, f)))
dt
#   trial rep plot
#1:     a   1  101
#2:     b   2  201
#3:     c   3  301
#4:     a   1  102
#5:     b   2  202
#6:     c   3  302
#7:     a   1  103
#8:     b   2  203
#9:     c   3  303
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...