gpt4 book ai didi

r - 按 id 对数据框中的一个变量进行排序

转载 作者:行者123 更新时间:2023-12-03 18:14:18 24 4
gpt4 key购买 nike

我有一个数据框,其中包含许多由 id 变量分隔的公司信息。我想对其中一个变量进行排序并为每个 id 重复它。拿这个例子来说,

df <- structure(list(id = c(110, 110, 110, 90, 90, 90, 90, 252, 252
), var1 = c(26, 21, 54, 10, 18, 9, 16, 54, 39), var2 = c(234,
12, 43, 32, 21, 19, 16, 34, 44)), .Names = c("id", "var1", "var2"
), row.names = c(NA, -9L), class = "data.frame")

看起来像这样
df
id var1 var2
1 110 26 234
2 110 21 12
3 110 54 43
4 90 10 32
5 90 18 21
6 90 9 19
7 90 16 16
8 252 54 34
9 252 39 44

现在,我想根据 var1 对数据框进行排序由矢量 id .我能想到的最简单的解决方案是使用 apply像这样的功能,
> apply(df, 2, sort)
id var1 var2
[1,] 90 9 12
[2,] 90 10 16
[3,] 90 16 19
[4,] 90 18 21
[5,] 110 21 32
[6,] 110 26 34
[7,] 110 39 43
[8,] 252 54 44
[9,] 252 54 234

然而,这不是我想要的输出。正确的输出应该是,
   id var1 var2
1 110 21 12
2 110 26 234
3 110 54 43
4 90 9 19
5 90 10 32
6 90 16 16
7 90 18 21
8 252 39 44
9 252 54 34

id 分组并按 var1 排序栏目 保持原样 id列顺序。

知道如何排序吗?

最佳答案

笔记。正如 Moody_Mudskipper 所说,没有必要使用 tidyverse也可以使用 base R 轻松完成:

df[order(ordered(df$id, unique(df$id)), df$var1), ]

单线 tidyverse无任何解决方案 temp变量:
library(tidyverse)
df %>% arrange(ordered(id, unique(id)), var1)
# id var1 var2
# 1 110 26 234
# 2 110 21 12
# 3 110 54 43
# 4 90 10 32
# 5 90 18 21
# 6 90 9 19
# 7 90 16 16
# 8 252 54 34
# 9 252 39 44

解释原因 apply(df, 2, sort)不起作用

您想要做的是独立地对每一列进行排序。 apply在指定维度上运行(在本例中为 2,对应于列)并应用函数(在本例中为 sort)。
apply试图进一步简化结果,在这种情况下简化为矩阵。所以你得到了一个矩阵(不是 data.frame ),其中每一列都是独立排序的。例如,来自 apply 的这一行称呼:
# [1,]  90    9   12

原版中甚至不存在 data.frame .

关于r - 按 id 对数据框中的一个变量进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256777/

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