首先,我要感谢你们的帮助。当我被封锁时,我在这个网站上找到了很多解决方案!
第二,我有一个关于性能的问题: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我设法做了些事情,用了一个循环:
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)发布于 2017-05-29 12:10:37
我们将首先创建一个零向量,只要表有行。
然后,我们将与表中的"entryId“行对应的向量元素设置为1。
如果我们对这个向量进行累加和,我们将为每个entryId和随后的行(如Homestore等)有一个常量id。
然后,我们将这些ids映射到我们要查找的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](另一种效率较低的解决方案请参见编辑历史)
https://stackoverflow.com/questions/44241439
复制相似问题