R如何获得每个用户的第三行和最后一行

时间:2017-04-02 20:59:08

标签: r

我有一张表格,其中包含有关某些用户的信息。我想要做的是提取每个用户的第三行和最后一行......我该怎么做?例如:

User | num |

use1 | 3 |

use1 | 2 |

use1 | 5 |

use1 | 8 |

use1 | 6 |

use2 | 1 |

..

因此,在此示例中,我希望行num = 5num = 6,这将继续为表中的每个不同用户。

4 个答案:

答案 0 :(得分:1)

这个怎么样?

library(dplyr)

# Assuming df is your sample data
df %>% group_by(User) %>% filter(row_number() %in% c(3, n()))

答案 1 :(得分:1)

您可以使用这样的data.table解决方案:

library(data.table)

dt  = data.table("user" = c(rep(1,5),rep(2,5)),"num" = c(3,2,5,8,6,10:6))

dt[, "row" := 1:.N, by =.(user)]

> dt[ , .(Num = 3,.N), by = .(user)]
   user Num N
1:    1   3 5
2:    2   3 5

答案 2 :(得分:1)

对于多样性,这是一个plyr解决方案:

library(plyr)

#group by user and return 3rd and last row
ddply(df, .(User), function(x) x[c(3, nrow(x)),])

答案 3 :(得分:0)

我们可以使用base R

i1 <- with(data, as.logical(ave(seq_along(User), User, FUN = 
           function(x) seq_along(x) %in% c(3, length(x) & length(x) > 3))))
data[i1,]