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'。所以也許讓你的例子更合理? –