我會嘗試這樣的事情,可以更簡化,但這種方式更加透明:
I <- rbind(
cbind(rep("df_1",nrow(df_1)),
1:nrow(df_1)),
cbind(rep("df_2",nrow(df_2)),
1:nrow(df_2)),
cbind(rep("df_3",nrow(df_3)),
1:nrow(df_3)))
I <- I [order(I[,2],I[,1]),]
df_main <- cbind(df_main, I[1:nrow(df_main),])
,現在你可以輕鬆的行提取到獨立的DFS:
df_1 <- df_main [df_main$v1 == "df_1",]
我沒有機會測試此代碼,但我希望它有助於獲得更接近的解決方案。
,David。
編輯:
嗨森,我想這取決於N_1空數據幀如何展示自己一點點。最後,從空數據框中需要的唯一信息是行數(除非不允許每行保存新數據)。如果你有一個行數爲每更容易實際創建空的數據幀:
首先,模擬了一些數據:
n <- 2000
n_1 <- 20
df_main <- data.frame (SomeCol = paste ("Some Value", 1:n))
製造假rowcounts空DFS:
(rowcounts_of_n_1_dfs <- round (rnorm (n_1, 75, 25)))
不運行啓動
如果您實際上必須從對象df_1,df_2,..,df_開始,那麼您可以這樣做:
rowcounts_of_n_1_dfs <- unlist (lapply (1:n_1, function (x){
return (nrow (get (paste ("df", x, sep = "_"))))
}))
無法運行結束
現在簡單地創建distributionlist爲:
dist <- data.frame (df = rep (1:n_1, rowcounts_of_n_1_dfs),
i = unlist (lapply (rowcounts_of_n_1_dfs, seq)))
神奇的是在排序:
dist <- dist [ with (dist, order(i, df)),]
只需要分發到df_main用完了:
df_list <- split (df_main, dist$df [ 1:nrow (df_main)])
最後,將在全球環境中的dataframes:
數據幀
dummy <- lapply (1:n_1, function (x) {
assign (paste ("df", x, sep = "_"), df_list [[ x ]], envir = globalenv())
})
檢查是否已創建:
ls()
我得到這個:
[1] "df_1" "df_10" "df_11" "df_12" "df_13" "df_14"
[7] "df_15" "df_16" "df_17" "df_18" "df_19" "df_2"
[13] "df_20" "df_3" "df_4" "df_5" "df_6" "df_7"
[19] "df_8" "df_9" "df_list" "df_main" "dist" "dummy"
[25] "n" "n_1" "rowcounts_of_n_1_dfs"
嗨大衛,這正是我需要它做的。謝謝!還有一個問題。有更多的程序化答案嗎?也就是說,假設我有一個有n行的df_main,我需要按照上述相同的方式將行分配給n_1個數據幀,每個數據幀都有一些行數。你會如何做到這一點? –
嗨Nathan,我想這取決於n_1空白數據框的表現方式。最後,從空數據框中需要的唯一信息是行數(除非不允許每行保存新數據)。查看我的答案更新。 –
太棒了,大衛!非常感謝。你一直非常有幫助。 –