我需要有关R中数据操作的帮助。
我的数据集看起来像这样。
Name, country, age
Smith, Canada, 27
Avin, India, 25
Smith, India, 27
Robin, France, 28
现在我想根据名称和国家/地区的组合来确定“史密斯”所经历的更改次数(两次)。
基本上,我想将每个数据点与其他数据点进行比较,并确定整个数据集中仅存在名称和国家/地区组合的变化计数。
答案 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 = ',')