R 选择组中的第二个元素

标签 r select

我试图找到一种更 R 风格的方式来选择 R 中组的第二个元素(但不是第一个)。

我结束了: 1. 创建索引 rowNumIndex ; 2. 选择并将前两行放入一个数据框中,然后将前两行放入单独的数据框中;然后 3. “反向合并” 2 个数据框以仅从数据框中获得唯一值和前两行:

firsts <- ddply(df,.(group), function(x) head(x,1)) # 2 records using data below

seconds <- ddply(df,.(group), function(x) head(x,2)) # 4 records using data below

real.seconds <- seconds[!seconds$rowNumIndex %in% firsts$rowNumIndex, ] # 2 records, the second elements only

这是一些假装数据:
group     var1     rowNumIndex
A         8        1
A         9        2
A         10       3
B         11       4
B         12       5
B         13       6
B         14       7


structure(list(group = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L
), .Label = c("A", "B"), class = "factor"), var1 = 8:14, rowNumIndex = 1:7), .Names = c("group", 
"var1", "rowNumIndex"), class = "data.frame", row.names = c(NA, 
-7L))

因此,数据框 firsts好像:
group     var1     rowNumIndex
A         8        1
B         11       4

和数据框seconds好像:
group     var1     rowNumIndex
A         8        1
A         9        2
B         11       4
B         12       5

和数据框real.seconds好像:
group     var1     rowNumIndex
A         9        2
B         12       5

有没有办法在不求助于例如索引的情况下做到这一点?在此先感谢您提供的无疑是一个令人心碎的简单而优雅的解决方案!

最佳答案

dplyr 的解决方案:

library(dplyr)

group_by(df, group) %>% slice(2)

#     group  var1 rowNumIndex
#    <fctr> <int>       <int>
# 1      A     9           2
# 2      B    12           5

dplyr 0.3选择:
group_by(df, group)%.%filter(seq_along(var1)==2)
  group var1 rowNumIndex
1     A    9           2
2     B   12           5

此解决方案将保留数据的所有列。如果你只想要两列(group 和 var),你可以这样做:
group_by(df, group)%.%summarise(var1[2])
  group var1[2]
1     A       9
2     B      12
split的解决方案, lapplydo.call
real.seconds<-do.call("rbind", lapply(split(df, df$group), function(x) x[2,]))

这会给你:
real.seconds
  group var1 rowNumIndex
A     A    9           2
B     B   12           5

或者,更优雅地,使用 by :
real.seconds <- do.call(rbind, by(df, df$group, function(x) x[2, ]))

关于R 选择组中的第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231201/

相关文章:

r - 将逻辑回归与条形图结合起来以获得成熟度结果

javascript - 通过R中的串扰使用选择框在R plotly图中选择默认值,使用静态html不 Shiny

MySQL 错误 : #1142 - SELECT command denied to user

SQL选择并按一段时间(时间戳)分组

php - 如果第 1 列是用户,则插入其中,否则插入第 2 列

r - 自定义 DataTables 如何在 Shiny 中显示缺失值

r - R中wt()函数在哪里

select - 从 Chrome/Webkit 中的 <select> 元素中删除圆 Angular

php - 如何仅在日期之间使用选择(sql)

r - 来自 R 的 glm 例程的预期 Fisher 信息