phi*_*ooo 7 r data-manipulation dplyr
下面的代码应该按年度对数据进行分组,然后创建两个具有每年第一个和最后一个值的新列.
library(dplyr)
set.seed(123)
d <- data.frame(
group = rep(1:3, each = 3),
year = rep(seq(2000,2002,1),3),
value = sample(1:9, r = T))
d %>%
group_by(group) %>%
mutate(
first = dplyr::first(value),
last = dplyr::last(value)
)
Run Code Online (Sandbox Code Playgroud)
但是,它不能正常工作.预期的结果是
group year value first last
<int> <dbl> <int> <int> <int>
1 1 2000 3 3 4
2 1 2001 8 3 4
3 1 2002 4 3 4
4 2 2000 8 8 1
5 2 2001 9 8 1
6 2 2002 1 8 1
7 3 2000 5 5 5
8 3 2001 9 5 5
9 3 2002 5 5 5
Run Code Online (Sandbox Code Playgroud)
然而,我得到了这个(它取决于整个数据框的第一个和最后一个值,而不仅仅是组):
group year value first last
<int> <dbl> <int> <int> <int>
1 1 2000 3 3 5
2 1 2001 8 3 5
3 1 2002 4 3 5
4 2 2000 8 3 5
5 2 2001 9 3 5
6 2 2002 1 3 5
7 3 2000 5 3 5
8 3 2001 9 3 5
9 3 2002 5 3 5
Run Code Online (Sandbox Code Playgroud)
phi*_*ooo 13
dplyr::mutate()
做了伎俩
d %>%
group_by(group) %>%
dplyr::mutate(
first = dplyr::first(value),
last = dplyr::last(value)
)
Run Code Online (Sandbox Code Playgroud)
Aru*_*esh 12
您还可以尝试使用 dpylr 中的汇总函数来获取唯一组的第一个和最后一个值
d %>%
group_by(group) %>%
summarise(first_value = first(na.omit(values)),
last_value = last(na.omit(values))) %>%
left_join(d, ., by = 'group')
Run Code Online (Sandbox Code Playgroud)
sah*_*ahn 11
如果您来自未来并且dplyr
已停止支持first
和last
功能或者想要一个面向未来的解决方案,您可以像列表一样对列进行索引:
> d %>% \n group_by(group) %>% \n mutate(\n first = value[[1]], \n last = value[[length(value)]]\n )\n
Run Code Online (Sandbox Code Playgroud)\n# A tibble: 9 \xc3\x97 5\n# Groups: group [3]\n group year value first last\n <int> <dbl> <int> <int> <int>\n1 1 2000 3 3 4\n2 1 2001 8 3 4\n3 1 2002 4 3 4\n4 2 2000 8 8 1\n5 2 2001 9 8 1\n6 2 2002 1 8 1\n7 3 2000 5 5 5\n8 3 2001 9 5 5\n9 3 2002 5 5 5\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
14745 次 |
最近记录: |