1

我正在尝试用 3 个向量创建一个 data.table。其中向量 A Trial = [a,b,c...n]、向量 Brep = [1,2,3,...,n]和向量 Cplot = [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 将 plot 增加 100 x rep + plot #。

试用 (x):rep 1,情节 1 -> 101

试用 (x):rep 1,情节 2 -> 102

试用 (x):rep 2,情节 1 -> 201

试用 (x):rep 2,情节 2 -> 202

等等

4

2 回答 2

0

感谢所有的帮助。以下允许我动态编辑 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))
于 2020-01-18T11:38:05.333 回答
0

问题似乎是以正确的顺序将函数应用于rep向量plotouter是解决它的好人选。

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
于 2020-01-18T08:20:29.643 回答