更改结构表
问题描述:
首先我要感谢大家的帮助。当我被阻止时,我在这个网站上发现了很多解决方案!更改结构表
其次,我对性能问题: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表中与“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]
(见另效率要低得多的解决方案编辑历史)
如果您提供*工作*代码示例(在一个小玩具数据集),你更有可能得到一些有用的答案。至少我不清楚如何从输入到输出。我不知道你提供的代码是如何做的。用言语解释你的问题也很好。 –
谢谢你的建议。我要添加一些信息 – karibuu