【发布时间】:2019-09-09 03:06:27
【问题描述】:
我是 R 新手,正在研究语言数据。我想用 dplyr 做的是通过匹配另一列的值来提取某一行的值。
我尝试在 mutute 中使用 which(),但它不起作用。尝试使用索引,但它有其自身的问题(如下所示)。
例如,假设我有:
library(dplyr)
df <- tibble(ID = c(1,1,1,2,2,3,3,3,4,4),
year = c(2013,2014,2015,2013,2015,2013,2014,2015,2013,2015),
Income = c(49, 32, 47, 14, 15, 14, 46, 45, 16, 42),
Sales = c(12, 21, 42, 30, 10, 19, 16, 27, 18, 32))
最后,我想从前一年中扣除某个值。例如,(2014 年收入)-(2013 年收入)。我想做的是以类似的方式使用 dplyr,我在 base R 中调用df$Income[df$year=="2014"]。
我不去的原因:
dftemp <- df %>%
group_by(ID) %>%
mutate(Income14minus13 = Income[2] - Income[1])
是指数没有考虑到数据中的 2014 年失踪,所以我想确保我提取的是准确的值。
我也试过没有成功:
dftemp <- df %>%
enter code here`group_by(ID) %>%
mutate(Income13 = Income[which(year==2013)],
Income14 = Income[which(year==2014)],
Income14minus13 = Income14 - Income13)
最后,我想把它作为一个输出:
> desired_data
# A tibble: 10 x 7
ID year Income Sales Income13 Income14 Income15
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2013 49 12 49 32 47
2 1 2014 32 21 49 32 47
3 1 2015 47 42 49 32 47
4 2 2013 14 30 14 NA 15
5 2 2015 15 10 14 NA 15
6 3 2013 14 19 14 46 45
7 3 2014 46 16 14 46 45
8 3 2015 45 27 16 46 45
9 4 2013 16 18 16 NA 42
10 4 2015 42 32 16 NA 42
我注意到 case-when() 仅在单行中生成变量,因此不允许按行操作,而我想要的输出却可以。
非常感谢任何帮助!
【问题讨论】: