r - 将多个列合并为一个具有 R 中特定条件的列

标签 r dplyr

我有以下形式的数据:

Id1      Id21    c1      Id22    c2      Id23     c3      Id24       c4    
1         20      5        11     9        9      20       32        10
1         40      4        14     9        13      5       36         9
1         43      3        15     3        23      1       39         8     
2         47      5        17     8        11      9       10         5
2         5       4        12     8        14      8       28         4      
2         6       0        10     2        24      4       23         2
3         .       .         .     .         .      .       .          .
3         .       .         .     .         .      .       .          .
3          
4
.
.
100
100
100

Id1,每个 Id 有三个条目,有对应的 Id2i 和 ci,i -> [1,4] 这样对于每个 id1,id2i 始终处于递增顺序,而 ci 始终处于递减顺序。 我需要的输出是:

Id1    Id2     c
1       9      20
1       32     10  
1       11     9
1       14     9
1       36     9
2       11     9
2       17     8
2       12     8
2       14     8
2       47     5
.
.
.
100
100
100
100
100     .      .

因此对于 id1 中每个 id 的五个条目,从所有 ci 中选择前 5 个 c,这样 c(输出)是所有 ci 的最大组。 如何在 R 中实现这一点?

最佳答案

使用 dev version of data.table :

# using first six rows from your post
require(data.table) # v1.9.5+
ans <- melt(setDT(df), measure = patterns(c("^Id2", "^c[0-9]$"))
         value.name = c("Id2", "c"))
ans[order(-c), head(.SD, 5L), by=Id1, .SDcols = -(variable)]
#     Id1 Id2  c
#  1:   1   9 20
#  2:   1  32 10
#  3:   1  11  9
#  4:   1  14  9
#  5:   1  36  9
#  6:   2  11  9
#  7:   2  17  8
#  8:   2  12  8
#  9:   2  14  8
# 10:   2  47  5

基本上,melt 可以接受列名列表,以将列表中每个元素的列分组到单独的列中。查看 lapply(...) 的结果,了解哪些列组合在一起。

然后我们在按 c 列降序排序后按 Id1 分组,并从属于每个组的数据子集中选取前 5 行。

关于r - 将多个列合并为一个具有 R 中特定条件的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376926/

相关文章:

r - 根据值将数据框列的内容拆分为不同的列

r - 当x也是数据表中的列时,get(x)在R data.table中不起作用

r - 如何将 html 表导入到 R 中?

r - 根据外部值有条件地应用管道步骤

r - 查找具有相应名称的命名向量的唯一值

html - R中带有Knitr的高级html表-xtable包的替代品?

R DBI SQL Server : dbWriteTable truncates rows/field. 类型参数不起作用

r - 通过通用标识符合并复杂的 data.frame 行

r - 仅当列存在时才执行dplyr操作

r - 在 R 中使用日期/时间进行过滤