我尝试创建一个有条件地基于其他几个列的新列。这是我的数据。我正在努力创建一年多的差异列。
> 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解决方案。
答案 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的基本感。