当一行的行号等于R中有重复项的另一列的值时,如何选择该行

  • 本文关键字:一列 选择 何选择 一行 r row row-number
  • 更新时间 :
  • 英文 :


我有一个数据帧,如下所示-

df <- cbind(c(1,1,1,2,2,2,3,3,3,3), c(6,12,18,3,9,12,4,8,12,16),c(3,3,3,2,2,2,4,4,4,4))
colnames(df) <- c("ID","value","index")

我想得到以下结果-

df1 <- cbind(c(1,2,3), c(18,9,16),c(3,2,4))

因此,我基本上想提取(对于每个ID(行号等于该ID索引的行。例如,ID 1的第3行、ID 2的第2行和ID 4的第4行。

我尝试了以下代码

df1 <- df%>%group_by(ID)%>%filter(index==index)

但它不起作用。请帮我解决这个问题。

使用slice为每个ID选择index行。

library(dplyr)
df %>% group_by(ID) %>% slice(first(index)) %>% ungroup
#     ID value index
#  <dbl> <dbl> <dbl>
#1     1    18     3
#2     2     9     2
#3     3    16     4

这可以在data.table和基本R中写成:

library(data.table)
setDT(df)[, .SD[first(index)], ID]
#Base R
subset(df, index == ave(value, ID, FUN = seq_along))

数据

df <- data.frame(ID = c(1,1,1,2,2,2,3,3,3,3), 
value = c(6,12,18,3,9,12,4,8,12,16),
index = c(3,3,3,2,2,2,4,4,4,4))

添加到Ronak Shah的答案中,我想做你想做的事情的简单代码之一是:

library(dplyr)
df <- 
data.frame(ID = c(1,1,1,2,2,2,3,3,3,3), value = c(6,12,18,3,9,12,4,8,12,16), index = c(3,3,3,2,2,2,4,4,4,4))
df %>% group_by(ID) %>% filter(row_number() == index) %>% ungroup

相关内容

  • 没有找到相关文章

最新更新