Edit。我的答案的第一部分解决了original问题,即before“并走得更远”(这是由OP在编辑中添加的)。
另一种可能性,使用duplicated
. From ?duplicated
: "duplicated()
确定向量或数据帧的哪些元素是具有较小下标的元素的重复项。”
这里我们使用!
,逻辑非 (NOT),用于选择not“n”的重复元素,即“n”每个级别的第一个元素。
df[!duplicated(df$n), ]
# n s
# 1 2 a
# 3 3 c
# 5 4 e
Update直到现在才看到您的“并进一步”编辑。我的第一个建议肯定是使用ave
,正如 @thelatemail 和 @sparrow 已经提议的那样。但为了深入研究 R 工具箱并向您展示另一种选择,这里有一个dplyr
way:
对数据进行分组n
, 使用mutate
函数创建一个新变量“first”,其值为“s的第一个元素”(s[1]
),
library(dplyr)
df %.%
group_by(n) %.%
mutate(
first = s[1])
# n s first
# 1 2 a a
# 2 2 b a
# 3 3 c c
# 4 3 d c
# 5 4 e e
# 6 4 f e
或者全力以赴dplyr
便利功能及使用first
代替[1]
:
df %.%
group_by(n) %.%
mutate(
first = first(s))
A dplyr
您原来问题的解决方案是使用summarise
:
df %.%
group_by(n) %.%
summarise(
first = first(s))
# n first
# 1 2 a
# 2 3 c
# 3 4 e