Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R dataframe中,如何搜索以前的事务信息_R_Bigdata - Fatal编程技术网

在R dataframe中,如何搜索以前的事务信息

在R dataframe中,如何搜索以前的事务信息,r,bigdata,R,Bigdata,假设我有一个R数据帧。每行代表某人在特定日期进行的交易。有许多栏有更多关于交易的信息,例如他/她花的钱和他/她购买的商品数量。一个人可能有许多事务,因此一个人可能有几行。假设我想要一个列,记录客户在上一笔交易中的花费。现在,我使用For循环查看整个数据帧,以检查该客户是否有以前的交易。如果客户有以前的交易,则我向该字段添加值;如果没有,我就跳到下一排。它可以工作,但我正在处理一个超过170万行的数据帧,因此for循环对我来说太慢了。 你有没有更好的办法来解决这个问题?感谢 假设您有这样一个dat

假设我有一个R数据帧。每行代表某人在特定日期进行的交易。有许多栏有更多关于交易的信息,例如他/她花的钱和他/她购买的商品数量。一个人可能有许多事务,因此一个人可能有几行。假设我想要一个列,记录客户在上一笔交易中的花费。现在,我使用For循环查看整个数据帧,以检查该客户是否有以前的交易。如果客户有以前的交易,则我向该字段添加值;如果没有,我就跳到下一排。它可以工作,但我正在处理一个超过170万行的数据帧,因此for循环对我来说太慢了。
你有没有更好的办法来解决这个问题?感谢

假设您有这样一个
data.frame

library(dplyr)
df <- read.table(header = TRUE, text = "
                  CustId  transaction      Spent
                  ID1 1     500
                  ID1 2     706
                  ID1 3     925
                  ID1 4     1195
                  ID1 5    1472
                  ID1 6    1413
                  ID2  1    950
                  ID2 2    1203
                  ID2 3    1486
                  ID2 4    1658")

df%>%group_by(CustId)%>%dplyr::mutate(Last=Spent[transaction==max(transaction)])


  CustId  transaction Spent  Last
   <fctr>       <int> <int> <int>
1     ID1           1   500  1413
2     ID1           2   706  1413
3     ID1           3   925  1413
4     ID1           4  1195  1413
5     ID1           5  1472  1413
6     ID1           6  1413  1413
7     ID2           1   950  1658
8     ID2           2  1203  1658
9     ID2           3  1486  1658
10    ID2           4  1658  1658
库(dplyr)
df%group_by(CustId)%%>%dplyr::mutate(最后一次=花费[事务==最大(事务)])
上一次使用的CustId事务
1 ID1 1500 1413
2 ID1 2 706 1413
3 ID1 3 925 1413
4 ID1 4 1195 1413
5 ID1 5 1472 1413
6 ID1 6 1413 1413
7 ID2 1 950 1658
8 ID2 2 1203 1658
9 ID2 3 1486 1658
10 ID2 4 1658 1658

如果您提供某种类型的示例输入数据和所需的输出,以便测试可能的解决方案,那么就更容易为您提供帮助。它不必是完整的,但至少有一些东西可以玩是有用的,不那么抽象。我的理解是OP对以前交易的金额感兴趣:
df%>%groupby(CustId)%%>%mutate(Last=lag(spend))
@HubertLc只是一个猜测~~