计算其他列r条件的列

时间:2017-10-21 01:48:26

标签: r function dplyr

我尝试创建一个有条件地基于其他几个列的新列。这是我的数据。我正在努力创建一年多的差异列。

> person <- c(rep("A", 4), rep("B", 1), rep("C",3), rep("D",1))
> score <- c(1,1,2,4,1,1,2,2,3)
> year <- c(2017, 2016, 2015, 2014, 2015, 2017, 2015, 2014, 2017)

此功能将查找该个人的上一年的数据,并从他们当前的分数中获得该分数。如果没有上一年的数据,则返回NA。所以对于我的数据,我会得到一个新专栏&#34;差异&#34;其值为0,-1,-2,NA,NA,NA,0,NA,NA。

很想看到dplyr的答案,但欢迎vanilla r解决方案。

2 个答案:

答案 0 :(得分:2)

使用dplyr

library(dplyr)
df %>%
  arrange(person, year) %>%
  group_by(person) %>%
  mutate(per = ifelse(year - lag(year) == 1, score - lag(score), NA)) %>%
  arrange(person, -year)

# A tibble: 9 x 4
# Groups:   person [4]
  person score  year   per
  <fctr> <dbl> <dbl> <dbl>
1      A     1  2017     0
2      A     1  2016    -1
3      A     2  2015    -2
4      A     4  2014    NA
5      B     1  2015    NA
6      C     1  2017    NA
7      C     2  2015     0
8      C     2  2014    NA
9      D     3  2017    NA

答案 1 :(得分:1)

回答你在温家宝的回答中提出的问题。 你可以查看本书的第5章(http://r4ds.had.co.nz/transform.html),找出文的答案中使用的每个功能和符号。 你也可以阅读这个(http://varianceexplained.org/r/teach-tidyverse/)来了解基本的r与tidyverse的基本感。