首先,我要感谢大家的帮助。当我被封锁时,我在这个网站上找到了很多解决方案!
其次,我对性能有一个问题:问: 我有一张这样的桌子:
Col1 ; Col2
Entry X1
Home X2
Code X3
Entry Y1
Home Y2
Code Y3
我想要这个:
Col1 ; Col2
X1 ; X2
X1 ; X3
Y1 ; Y2
Y1 ; Y3
我设法做一些东西,带有for循环:
for (i in 1:nrow(DateFrame)){
if(DateFrame[i,1]=="entryId")
{
entryid<-DateFrame[i,2]
}
else {}
DateFrame[i,3]<-entryid}
它与2000行完美配合。但不幸的是,我有3000万行,加载1小时后仍然没有结果(1小时后i = 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)
答案 0 :(得分: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]
(请参阅另一个低效解决方案的编辑历史记录)