我有一个如下所示的数据框架:

Year   Person   Office
2005   Peter    Boston 
2007   Peter    Boston
2008   Peter    Chicago 
2009   Peter    New York
2011   Peter    New York 
2003   Amy      Seattle 
2004   Amy      Boston 
2006   Amy      Chicago 
2007   Amy      Chicago

我想计算一个办公室人员级别的标准化度量(count),它捕获一个人在来到当前办公室之前经历的办公室数量.在达到当前位置之前的总年数将该度量标准化.下面是理想的输出.对于彼得来说,波士顿是他的第一个办公室,因此,他在波士顿的标准化度量计数为0.对彼得来说,芝加哥是他的第二个办公室,他花了2008-2005=3年才来到芝加哥办公室.因此,他在芝加哥的标准化度量计数是1/3.

Office    Person  Count
Boston    Peter   0
Boston    Amy     1
Chicago   Peter   1/3
Chicago   Amy     2/3
New York  Peter   1/2
Seattle   Amy     0

推荐答案

你可以用

library(dplyr)

df %>% 
  group_by(Person, Office) %>% 
  slice_min(Year) %>% 
  arrange(Year) %>% 
  add_count() %>% 
  group_by(Person) %>% 
  mutate(Count = if_else(cumsum(n) == 1, 0, (cumsum(n) - 1) / (Year - first(Year))),
         .keep = "unused") %>% 
  ungroup()

这又回来了

# A tibble: 6 x 3
  Person Office   Count
  <chr>  <chr>    <dbl>
1 Amy    Seattle  0    
2 Amy    Boston   1    
3 Peter  Boston   0    
4 Amy    Chicago  0.667
5 Peter  Chicago  0.333
6 Peter  New_York 0.5 

R相关问答推荐

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

使用tidyverse / Mutate的存款账户余额

如何在R中合并和合并多个rabrame?

如何写一个R函数来旋转最后n分钟?

如果某些列全部为NA,则更改列

将重复项转换为NA

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

基于R中的间隔扩展数据集行

如何将网站图像添加到带有极坐标的面包裹条形图?

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

停止ggplot将多行减少到一行

将工作目录子文件夹中的文件批量重命名为顺序

按组内中位数分类

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

通过匹配另一个表(查找表)中的列值来填充数据表,并在另一个变量上进行内插

如何在不使用SHINY的情况下将下拉滤镜列表添加到ggploy?

了解nchar在列表上的意外行为

希望解析和复制R中特定模式的数据

使用相对风险回归计算RR

如何将数据框压缩为更宽,同时将行输入保持为行输入,而不是R中的列名?