假设我有一个牙刷品牌数据框,并评估了它们随时间的流行程度:
year brand_1 brand_2
2010 0.7 0.3
2011 0.6 0.6
2012 0.4 0.9
还有一个说每个牙刷品牌都通电时,NA
这表示他们从未这样做过:
brand went_electrical_year
brand_1 NA
brand_2 2011
现在,我想将这些结合起来,以获得每年电动牙刷品牌的普及率(占总数的一部分):
year electrical_prevalence
2010 0
2011 0.5
2012 0.69
在2010年,B / C为0,没有一个品牌是电气品牌。在2011年,两者均为0.5 b / c,它们同样普遍。在2012年,两者均为0.69 b / c,但电气方面更为普遍。
我已经在R中对此进行了角力,但找不到解决方法。将不胜感激任何帮助或建议。干杯。
假设数据帧是df1
和df2
,则可以使用以下tidyverse
方法。
首先,使用pivot_longer
可以将您的数据设置为长格式,这将更易于操作。使用left_join
添加当品牌去电的相关年份。
我们可以创建一个指标mult
,如果品牌已经用电,则该指标将为1,如果没有,则为0。
然后,对于每一年,您可以通过将mult
每个品牌的受欢迎程度值乘以然后除以该年的总和来确定比例。
library(tidyverse)
df1 %>%
pivot_longer(cols = -year) %>%
left_join(df2, by = c("name" = "brand")) %>%
mutate(mult = ifelse(went_electrical_year > year | is.na(went_electrical_year), 0, 1)) %>%
group_by(year) %>%
summarise(electrical_prevalence = sum(value * mult) / sum(value))
输出量
year electrical_prevalence
<int> <dbl>
1 2010 0
2 2011 0.5
3 2012 0.692
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句