2017-05-29 338 views
1

首先我要感謝大家的幫助。當我被阻止時,我在這個網站上發現了很多解決方案!更改結構表

其次,我對性能問題:Q 我有一個表是這樣的:

Col1 ; Col2 
Entry X1 
Home X2 
Code X3 
Entry Y1 
Home Y2 
Code Y3 

,我想這一點:

Col1 ; Col2 
X1 ; X2 
X1 ; X3 
Y1 ; Y2 
Y1 ; Y3 

我能做到的東西,用對-loop:

for (i in 1:nrow(DateFrame)){  
if(DateFrame[i,1]=="entryId") 
{ 
entryid<-DateFrame[i,2] 
} 
else {} 
DateFrame[i,3]<-entryid} 

它與2000行完美結合。但不幸的是,我有三千萬行,加載1小時後,仍然沒有結果(1小時後我= 50 000 ...)

有人可以幫我解決這個頭痛問題嗎?

謝謝你!

編輯:這裏的日期框源

df_source = read.table(text = 'V1 V2 
entryId 2501100010101820 
HomeStore 10,00 
Customer 101826 
HomeStore 10 
Customer 101826 
HomeStore 10 
Customer 101826 
HomeStore 10 
Customer 101826 
entryId 2501100010101940 
HomeStore 10 
Customer 101942 
HomeStore 10 
Customer 101942 
HomeStore 10 
Customer 101942 
HomeStore 10 
Customer 101942 
entryId 2501100010101990 
HomeStore 10 
Customer 101999 
HomeStore 10 
Customer 101999 
HomeStore 10 
Customer 101999', header = TRUE) 

這裏數據幀我想

df_result = read.table(text = 'V1 V2 Copy 
entryId 2501100010101820 2501100010101820 
HomeStore 10 2501100010101820 
Customer 101826 2501100010101820 
HomeStore 10 2501100010101820 
Customer 101826 2501100010101820 
HomeStore 10 2501100010101820 
Customer 101826 2501100010101820 
HomeStore 10 2501100010101820 
Customer 101826 2501100010101820 
entryId 2501100010101940 2501100010101940 
HomeStore 10 2501100010101940 
Customer 101942 2501100010101940 
HomeStore 10 2501100010101940 
Customer 101942 2501100010101940 
HomeStore 10 2501100010101940 
Customer 101942 2501100010101940 
HomeStore 10 2501100010101940 
Customer 101942 2501100010101940 
entryId 2501100010101990 2501100010101990 ', header = TRUE) 
+1

如果您提供*工作*代碼示例(在一個小玩具數據集),你更有可能得到一些有用的答案。至少我不清楚如何從輸入到輸出。我不知道你提供的代碼是如何做的。用言語解釋你的問題也很好。 –

+0

謝謝你的建議。我要添加一些信息 – karibuu

回答

1

我們將首先創建零向量,只要表中有行。

然後,我們將設置爲1表中與「entryId」行對應的向量的元素。

如果我們這樣做載體的累積總和,我們將不得不爲每個ENTRYID和後續行如Homestore等恆定的ID ...

然後我們這些ID的座標映射到實際的entryId我們正在尋找。

最後我們添加你想要的列。

entry_flags <- rep(0,nrow(df_source)) 
entry_flags[which(df_source$V1 == "entryId")] <- 1 
entry_row_ids <- which(df_source$V1 == "entryId") 
copy_row_ids <- entry_row_ids[cumsum(entry_flags)] 
df_source$Copy <- df_source$V2[copy_row_ids] 

(見另效率要低得多的解決方案編輯歷史)

+0

謝謝穆迪的幫助! 不幸的是,它不適用於所有行。 事實上,我只是注意到有時候我有3行或1行每EntryCode所以重複= 2 doest不工作​​ – karibuu

+0

如果沒有一致的結構,它將很難做到沒有循環,這些項目是否攪亂了異常或他們非常頻繁嗎? –

+0

這是非常頻繁的...他們是雙線和缺失值..我只是在我的第一個主題添加代碼來創建我的數據集的一部分, – karibuu