gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:26:04 25 4
gpt4 key购买 nike

我有以下形式的数据:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com