按数据框分组并在 r 中的每个组中获取一行特定索引
group by a dataframe and get a row of specific index within each group in r
我有一个df喜欢
ProjectID Dist
1 x
1 y
2 z
2 x
2 h
3 k
.... ....
和一个长度为unique(df$ProjectID)
的索引向量,如
2
3
1
....
我想通过ProjectID获取Dist,索引为项目ID对应的元素向量。所以我想要的结果看起来像
ProjectID Dist
1 y
2 h
3 k
.... ....
我试过了
aggregate(XRKL ~ ID, FUN=..?, data=df)
但我不确定可以将索引向量放在哪里。有没有办法从 dply ftns、tapply 或聚合中获得正确的结果?还是我需要自己做一个函数?谢谢。
您可以在数据框中添加索引,然后 select 每个组中的那一行。
inds <- c(2, 3, 1)
df %>%
mutate(inds = inds[match(ProjectID, unique(ProjectID))]) %>%
#If ProjectID is sequential like 1, 2, 3
#mutate(inds = inds[ProjectID]) %>%
group_by(ProjectID) %>%
slice(first(inds)) %>%
ungroup() %>%
select(-inds)
# ProjectID Dist
# <int> <chr>
#1 1 y
#2 2 h
#3 3 k
数据
df <- structure(list(ProjectID = c(1L, 1L, 2L, 2L, 2L, 3L), Dist = c("x",
"y", "z", "x", "h", "k")), class = "data.frame", row.names = c(NA, -6L))
我有一个df喜欢
ProjectID Dist
1 x
1 y
2 z
2 x
2 h
3 k
.... ....
和一个长度为unique(df$ProjectID)
的索引向量,如
2
3
1
....
我想通过ProjectID获取Dist,索引为项目ID对应的元素向量。所以我想要的结果看起来像
ProjectID Dist
1 y
2 h
3 k
.... ....
我试过了
aggregate(XRKL ~ ID, FUN=..?, data=df)
但我不确定可以将索引向量放在哪里。有没有办法从 dply ftns、tapply 或聚合中获得正确的结果?还是我需要自己做一个函数?谢谢。
您可以在数据框中添加索引,然后 select 每个组中的那一行。
inds <- c(2, 3, 1)
df %>%
mutate(inds = inds[match(ProjectID, unique(ProjectID))]) %>%
#If ProjectID is sequential like 1, 2, 3
#mutate(inds = inds[ProjectID]) %>%
group_by(ProjectID) %>%
slice(first(inds)) %>%
ungroup() %>%
select(-inds)
# ProjectID Dist
# <int> <chr>
#1 1 y
#2 2 h
#3 3 k
数据
df <- structure(list(ProjectID = c(1L, 1L, 2L, 2L, 2L, 3L), Dist = c("x",
"y", "z", "x", "h", "k")), class = "data.frame", row.names = c(NA, -6L))