2017-05-29 340 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