我有一个 Dataframe
df <- data.frame(
"Quarter" = c("Q1 2019","Q1 2019","Q1 2019","Q2 2019","Q2 2019","Q2 2019","Q2 2019","Q3 2019","Q3 2019","Q3 2019","Q3 2019","Q4 2019","Q4 2019"),
"Name" = c("Ram","John","Jack","Ram","Rach","Will","John","Ram","Rach","Will","John","Rach","John"),
stringsAsFactors = FALSE
)
我需要计算每一季度增加和留下的人数,并与上一季度进行比较。
预期输出为
quarterYear status Count
1 Q1 2019 Added 3
2 Q1 2019 Left 0
3 Q2 2019 Added 2
4 Q2 2019 Left 1
5 Q3 2019 Added 0
6 Q3 2019 Left 0
7 Q4 2019 Added 0
8 Q4 2019 Left 2
我不知道如何比较两组并得到计数。
如何在R中实现预期的输出?
4条答案
按热度按时间deyfvvtc1#
不确定速度的影响,但其中很大一部分本质上是比较连续的计数,所以
diff
出现在脑海中。如果您需要长输出:
8e2ybdfx2#
拆分以创建一个列表并Map两个列表以获得“不等”元素的长度,即
您可以按照自己的方式整理输出
busg9geu3#
下面的工作原理是首先将
Name
列转换为Quarter
的名称列表,然后使用purrr::map2_int
将每个Quarter与前一个Quarter进行比较。最后,使用tidyr::pivot_longer
将添加的两个列Added
和Left
透视为长格式。结果:
wfsdck304#
这里有一种方法可以保持数据的宽度。我们将数据拆分为基于
Quarter
的 Dataframe 列表。使用map2
,我们比较上一个季度和下一个季度的值,并计算每个季度增加和留下的人数。分别计算第一季度的值,并将其绑定到原始 Dataframe 。在R中使用相同的逻辑: