r - 如何替换每组的第一个值

标签 r dplyr

这个问题在这里已经有了答案:





Change variable value for the first row group_by subject ID using dplyr

(2 个回答)


2年前关闭。




我的 df 如下:

set.seed(123)
df <- data.frame(x = sample(letters[1:3],20,replace = TRUE),
                 y = sample(1:10,20,replace = TRUE))
df <- df[order(df$x),]

我想用 NA 替换每个组的第一个值。例如:
x y
a NA
a 8
a 1
a 8
b NA
b 3
b 2
b 10
b 8
.
.

我对获取第一个值没有问题,但这没有意义。
test <- df %>% 
  group_by(x) %>% 
  do(a = head(.$y,1))

请帮助下一步。

最佳答案

dplyr我们可以 replace值其中 row_number是 1

library(dplyr)

df %>%
  group_by(x) %>%
  mutate(y = replace(y, row_number() == 1, NA))


#    x         y
#   <fct> <int>
# 1 a        NA
# 2 a         8
# 3 a         1
# 4 a         8
# 5 a         3
# 6 a         4
# 7 b        NA
# 8 b         6
# 9 b         3
#10 b         2
#....

或者使用基数 R ave
with(df, ave(y, x, FUN = function(i) replace(i, seq_along(i) == 1, NA)))
#[1] NA  8  1  8  3  4 NA  6  3  2 10  8 NA 10  7  6 10  7  5  3

关于r - 如何替换每组的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54146920/

相关文章:

r - dplyr 排除行

arrays - 有没有办法访问向量中的索引

r - 如何在 dplyr 中使用 map2() 改变() 列列表

r - 提取数据集中的第一个和最后一个位置

r - 如何使用网格图形系统将剖面线应用于多边形?

r - 取消列出数据框列并将它们粘贴在一起

r - 有什么解决方法可以对混合数据类型进行聚类并在 R 中渲染 3D 散点图吗?

r - 如何改变ggplot中的线宽?

r - ggplot2警告:ymin!= 0时,堆栈定义不正确

r - 使用 dplyr 获取列的值