我最近发表了关于Python中同样问题的这篇文章,我很想知道R中可用的选项。我想知道R是否有任何可以使这更容易的包。 How to tell if a value changed over dimension(s) in Pandas 假设我在某些日期有一些客户数据,我想看看他们的地址是否有所改变。在那些日期。理想情况下,我想将发生更改的两列复制到新表中,或者只获取总变化量的指标。
所以,如果我有一个像
这样的表Date , Customer , Address
12/31/14, Cust1, 12 Rocky Hill Rd
12/31/15, Cust1, 12 Rocky Hill Rd
12/31/16, Cust1, 14 Rocky Hill Rd
12/31/14, Cust2, 12 Testing Rd
12/31/15, Cust2, 12 Testing Ln
12/31/16, Cust2, 12 Testing Rd
我最终会计算两次更改,客户1在12/31/15和12/31/16之间的12 Rocky Hill Rd之间以及Cust2在12/31/14和12/31/15之间的变化。< / p>
理想情况下,我可以得到这样的表
Dates , Customer , Change
12/31/15 to 12/31/16, Cust1, 12 Rocky Hill Rd to 14 Rocky Hill Rd
12/31/14 to 12/31/15, Cust2, 12 Testing Rd to 12 Testing Ln
或者甚至只是改变的总数会很棒。有任何想法吗?理想情况下,我还有更多日期,可能会在这些日期进行多次更改,还有一些我想要检查更改的其他列。实际上,只需在每个列的某个日期期间对客户记录的更改总和就足够了。
答案 0 :(得分:2)
您可以使用group_by
中的summarise
和dplyr
将日期范围和更改计数作为新表中的列获取:
library(dplyr)
df %>%
group_by(Customer) %>%
summarise(dates = sprintf("%s to %s", min(Date), max(Date)),
change.count = length(unique(Address)) - 1)
结果:
# A tibble: 2 × 3
Customer dates change.count
<chr> <chr> <dbl>
1 Cust1 12/31/14 to 12/31/16 1
2 Cust2 12/31/14 to 12/31/16 1
答案 1 :(得分:1)
对于地址总数,您只能按客户ID汇总。
aggregate(Data$Address, by=list(Data$Customer), function(x) length(unique(x)))
Group.1 x
1 Cust1 2
2 Cust2 2
这是地址的号码。要获取更改的数量减去一个。