我有一个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
答案 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