0
我想构建一个数据框,其中有一系列包含另一列的随机分配的列。数据有一些需要维护的结构。即我想随机分配L许多时间,同时保持V的结构。我想要一个看起来像这样的数据框;R中的随机列循环
L B V A
1 1 1 2 10.9
2 1 1 2 6.5
3 1 1 2 8.6
4 1 1 3 11.1
5 1 1 4 13.1
6 1 1 6 11.5
并创建此;
ID L B V A R1 R2 R3 R4 R5
1 1_1_2 1 1 2 10.9 27 20 19 6 26
2 1_1_2 1 1 2 6.5 27 20 19 6 26
3 1_1_2 1 1 2 8.6 27 20 19 6 26
4 1_1_3 1 1 3 11.1 6 28 4 26 26
5 1_1_4 1 1 4 13.1 16 2 6 14 32
6 1_1_6 1 1 6 11.5 17 21 3 11 25
我可以做到这一点使用下面的脚本中手动,但我不知道是否有一个平稳的方式,使这个自动化的,因为我想这样做数百randomisations,使列R1,R2,R3。 。R n(所以这样做的循环比手动重复代码更可取)。
# Example Data Frame #
df = data.frame(sample(1:33, 1000, replace = T), sample(1:3, 1000, replace = T), sample(1:9, 1000, replace = T), round(rnorm(1000, 10, 2),1))
colnames(df) = c("L", "B", "V", "A")
df = transform(df,id=as.numeric(factor(df$V)))
df = data.frame(as.factor(df[,1]),as.factor(as.numeric(df[,2])),as.factor(df[,5]),as.numeric(df[,4]))
colnames(df) = c("L","B","V","A")
df = df[order(df$L, df$B, df$V),]
rownames(df) = NULL
head(df)
# ID #
df$ID = paste(df[,1], df[,2], df[,3], sep = "_")
ID = unique(as.vector(df$ID))
# R1 #
ID2 = data.frame(ID, sample(ID)); colnames(ID2) = c("ID","R1")
df = merge(df, ID2)
df$R1 = as.factor(do.call(rbind, strsplit(as.vector(df$R1), split="_"))[,1])
# R2 #
ID2 = data.frame(ID, sample(ID)); colnames(ID2) = c("ID","R2")
df = merge(df, ID2)
df$R2 = as.factor(do.call(rbind, strsplit(as.vector(df$R2), split="_"))[,1])
# R3 #
ID2 = data.frame(ID, sample(ID)); colnames(ID2) = c("ID","R3")
df = merge(df, ID2)
df$R3 = as.factor(do.call(rbind, strsplit(as.vector(df$R3), split="_"))[,1])
# R4 #
ID2 = data.frame(ID, sample(ID)); colnames(ID2) = c("ID","R4")
df = merge(df, ID2)
df$R4 = as.factor(do.call(rbind, strsplit(as.vector(df$R4), split="_"))[,1])
# R5 #
ID2 = data.frame(ID, sample(ID)); colnames(ID2) = c("ID","R5")
df = merge(df, ID2)
df$R5 = as.factor(do.call(rbind, strsplit(as.vector(df$R5), split="_"))[,1])
我怎样才能创建一个循环,这将做到这一点在ň列数?
我不明白这个随机背后的逻辑,你不能只是做例如'df [paste0(“R”,1:5)] < - sample(33,5)[rep(1:5,each = nrow(df))]'? –
不,维持** L **结构,而不** ** V **。我的意思是我想让所有具有相同** V **值的行被赋予相同的随机选择值** L **。 – Ell
在你的例子*所有*的值都是相同的'V'和'L'。所以也许让你的例子更合理? –