首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变更结构表

变更结构表
EN

Stack Overflow用户
提问于 2017-05-29 11:29:39
回答 1查看 55关注 0票数 1

首先,我要感谢你们的帮助。当我被封锁时,我在这个网站上找到了很多解决方案!

第二,我有一个关于性能的问题:Q--我有一个这样的表:

代码语言:javascript
复制
Col1 ; Col2
Entry   X1
Home    X2
Code    X3
Entry   Y1
Home    Y2
Code    Y3

我想要这个:

代码语言:javascript
复制
Col1 ; Col2
X1   ; X2
X1   ; X3
Y1   ; Y2
Y1   ; Y3

我设法做了些事情,用了一个循环:

代码语言:javascript
复制
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 .)

有人能帮我治这头痛吗?

谢谢你!

编辑:这里是日期框架源

代码语言:javascript
复制
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)

这里是我想要的数据

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-29 12:10:37

我们将首先创建一个零向量,只要表有行。

然后,我们将与表中的"entryId“行对应的向量元素设置为1。

如果我们对这个向量进行累加和,我们将为每个entryId和随后的行(如Homestore等)有一个常量id。

然后,我们将这些ids映射到我们要查找的entryId的实际坐标。

最后,我们添加您想要的列。

代码语言:javascript
复制
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]

(另一种效率较低的解决方案请参见编辑历史)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44241439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档