确定R中数据点的分类数据的变化

时间:2018-04-16 14:54:19

标签: r

我需要有关R中数据操作的帮助。

我的数据集看起来像这样。

Name, country, age
Smith, Canada, 27
Avin, India, 25
Smith, India, 27
Robin, France, 28

现在我想根据名称和国家/地区的组合来确定“史密斯”所经历的更改次数(两次)。

基本上,我想将每个数据点与其他数据点进行比较,并确定整个数据集中仅存在名称和国家/地区组合的变化计数。

1 个答案:

答案 0 :(得分:0)

您可以通过使用dplyr按组比较组合的滞后值与其当前值来实现此目的:

library(dplyr)

df %>%
  group_by(Name) %>%
  mutate(combination = paste(country, age),
         lag_combination = lag(combination,  default = 0, order_by = Name),
         Changes = cumsum(combination != lag_combination)) %>%
  slice(n()) %>%
  select(Name, Changes)

<强>结果:

# A tibble: 3 x 2
# Groups:   Name [3]
    Name Changes
  <fctr>   <int>
1   Avin       2
2  Robin       1
3  Smith       3

备注:

  • dplyr:lag不尊重group_by(Name),因此您需要将order_by = Name添加到滞后Name

  • 我使用default = 0设置默认设置,以便每个组的第一个条目不是NA

数据:

df = read.table(text="Name, country, age
Smith, Canada, 27
Avin, India, 25
Smith, India, 27
Robin, France, 28
Smith, Canada, 27
Robin, France, 28
Avin, France, 26", header = TRUE, sep = ',')