如何判断R

时间:2017-03-22 21:12:28

标签: r

我最近发表了关于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

或者甚至只是改变的总数会很棒。有任何想法吗?理想情况下,我还有更多日期,可能会在这些日期进行多次更改,还有一些我想要检查更改的其他列。实际上,只需在每个列的某个日期期间对客户记录的更改总和就足够了。

2 个答案:

答案 0 :(得分:2)

您可以使用group_by中的summarisedplyr将日期范围和更改计数作为新表中的列获取:

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

这是地址的号码。要获取更改的数量减去一个。