我正在尝试向现有数据框添加一列,以便该列定义每个用户购买的不同产品的数量。一个玩具示例是
Customer Product
1 Chocolate
1 Candy
1 Soda
2 Chocolate
2 Chocolate
2 Chocolate
3 Insulin
3 Candy
Run Code Online (Sandbox Code Playgroud)
输出应该在哪里
Customer Product #Products
1 Chocolate 3
1 Candy 3
1 Soda 3
2 Chocolate 1
2 Chocolate 1
2 Chocolate 1
3 Insulin 2
3 Candy 2
Run Code Online (Sandbox Code Playgroud)
我想在没有 for 循环的情况下执行此操作,因为我有数百万行,并且这将花费很长时间。我使用了 data.table 和其他方法来获取每个客户的产品数量,但我不知道如何轻松地将其作为列添加到现有数据框中。
提前致谢!
我需要根据另一个数据框中的多个条件在数据框中查找值.例
A=
Country Year Number
USA 1994 455
Canada 1997 342
Canada 1998 987
Run Code Online (Sandbox Code Playgroud)
必须添加一个名为"rate"的列
B=
Year USA Canada
1993 21 654
1994 41 321
1995 56 789
1996 85 123
1997 65 456
1998 1 999
Run Code Online (Sandbox Code Playgroud)
这样最终的数据框就是
C=
Country Year Number Rate
USA 1994 455 41
Canada 1997 342 456
Canada 1998 987 999
Run Code Online (Sandbox Code Playgroud)
换句话说:从B中的A中查找年份和国家,结果是C.我想在没有循环的情况下执行此操作.我想要一个通用的方法,这样我就可以根据两个以上的标准来查找.
我有以下data.table
year Person Number_of_visits
2012 1 0
2013 1 4
2014 1 0
2015 1 1
2012 2 1
2013 2 5
...
Run Code Online (Sandbox Code Playgroud)
我想确定每个人,他们的第一次访问是哪一年.所以期望的输出是:
year Person Number_of_visits New?
2012 1 0 NA
2013 1 4 Yes
2014 1 0 No
2015 1 1 No
2012 2 1 NA
2013 2 5 No
Run Code Online (Sandbox Code Playgroud)
我想也许可以在data.table中使用SHIFT函数,但我无法弄清楚如何这样做.一旦一个人访问过,他/她就不再是新人了,即使可能有一年之后没有访问.如果第一次访问发生在2012年,则应该有NA或类似条目.
我用过
test <- DT[ , NEW := c(0, (2:1)[(Number_of_visits== shift(Number_of_visits)) + 1][-1]), by = Person]
Run Code Online (Sandbox Code Playgroud)
但这自然给了我所有的变化,我想只注册从0到0以上的某个值(访问次数)的第一个变化