我在R工作。
这是我的数据。每所学校都告诉他们每个科目有多少空缺。他们可以给予四个理由来解释为什么他们认为他们有这么多的空缺。
例如,学校1给出了英语有这么多空缺的两个原因(工资和地点)。
data <- data.frame(school_id = c("1", "1", "2", "3", "3"),
subject = c("English", "English", "Maths", "French", "French"),
vacancies = c(40, 40, 20, 40, 10),
Reason = c("Pay", "Location", "Pay", "Experience", "Location")
| 学校ID|主题|空缺|理由|
| - -----|- -----|- -----|- -----|
| 一个|英语|四十|支付|
| 一个|英语|四十|位置|
| 2|数学|二十个|支付|
| 3|法语|四十|支付|
| 3|英语|十个|体验|
我想旋转原因,所以学校报告的每个科目都有一行空缺,但我似乎无法让它与pivot_longer或spread一起工作。
这就是我想要的...
| 学校ID|主题|空缺|理由1|理由2|理由3|理由4|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 一个|英语|四十|支付|位置|不适用|不适用|
| 2|数学|二十个|支付|不适用|不适用|不适用|
| 3|法语|四十|支付|不适用|不适用|不适用|
| 3|英语|十个|体验|不适用|不适用|不适用|
有人有什么想法吗?
Thanks:)
4条答案
按热度按时间vc6uscn91#
这与OP的期望输出相匹配,并且很清楚每一步发生了什么。
首先,我们按
school_id
和subject
对数据进行分组,以确定哪个原因是第一个,哪个原因是第二个,等等。然后我们基于school_id
和subject
透视表,使用Reason
作为值,Reason_Name
作为列名。如果我们想把这段代码压缩一点,我们可以说:
twh00eeo2#
axr492tv3#
这并不完全是你所描述的你想要的输出,但类似于GuedesBF的解决方案(我们有一个类似的思考过程,它出现;我是独立完成的)。但我认为有这样一个dataframe将是最有用的:
o0lyfsai4#