访问group_by数据集的第一行

时间:2018-05-20 09:27:30

标签: r

我有一个dataframe df1,列a,b,c。我想将c = 0分配给dataset返回的group_by(a,b)的第一行。我试过像

这样的东西
t <- df1 %>% group_by(a,b) %>% filter(row_number(a)==1) %>% mutate(c= 0)

但它减少了行数。预期输出

a     b     c
a1    b1    0
a1    b1    NA
a2    b2    0
a2    b2    NA

1 个答案:

答案 0 :(得分:0)

您可以使用seq_along将每个组中的元素从1编号到每个组中的元素总数(在这种情况下为2)。然后使用ifelse将每个组的第一个元素'c'设置为0,并将另一个元素保留为原样。

library(dplyr)
df %>% 
  group_by(a, b) %>% 
  mutate(c = ifelse(seq_along(c) == 1, 0, c))
#  A tibble: 4 x 3
#  Groups:   a, b [2]
#  a     b         c
#  <fct> <fct> <dbl>
#1 a1    b1       0.
#2 a1    b1      NA 
#3 a2    b2       0.
#4 a2    b2      NA 

数据

df <- data.frame(a = rep(c("a1", "a2"), each = 2),
                 b = rep(c("b1", "b2"), each = 2), 
                 c = NA)
df
#   a  b  c
#1 a1 b1 NA
#2 a1 b1 NA
#3 a2 b2 NA
#4 a2 b2 NA