gpt4 book ai didi

r - 键排序与使用 gather() 的原始列排序

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

键排序是否取决于我是否首先列出要收集的列与不收集的列?

这是我的数据框:

library(tidyr)
wide_df <- data.frame(c("a", "b"), c("oh", "ah"), c("bla", "ble"), stringsAsFactors = FALSE)
colnames(wide_df) <- c("first", "second", "third")
wide_df

first second third
1 a oh bla
2 b ah ble

首先,我按特定顺序收集所有列,并且我的排序在键列表中被视为第二,第一,尽管这些列实际上是按第一、第二排序的:
long_01_df <- gather(wide_df, my_key, my_value, second, first, third)
long_01_df

my_key my_value
1 second oh
2 second ah
3 first a
4 first b
5 third bla
6 third ble

然后我决定从收集中排除一列:
long_02_df <- gather(wide_df, my_key, my_value, second, first, -third)
long_02_df

third my_key my_value
1 bla second oh
2 ble second ah
3 bla first a
4 ble first b

key 再次排序为第二,第一。然后我像这样编码,相信正在做完全相同的事情:
long_03_df <- gather(wide_df, my_key, my_value, -third, second, first)
long_03_df

我根据原始 data.frame 中的实际列顺序获取键:
 third my_key my_value
1 bla first a
2 ble first b
3 bla second oh
4 ble second ah

当我使用 factor_key = TRUE 调用函数时,这种行为甚至没有改变。 .我缺少什么?

最佳答案

概括

这样做的原因是您不能混合负指数和正指数。 (你也不应该这样做:这根本没有意义。)如果你这样做,gather()将忽略一些索引。

详细解答

同样对于标准索引,您不得混合使用正索引和负索引:

x <- 1:10
x[c(4, -2)]
## Error in x[c(4, -2)] : only 0's may be mixed with negative subscripts

这是有道理的:使用 4 索引告诉 R 只保留第四个元素。没有必要明确告诉它另外扔掉第二个元素。

根据 gather() 的文档, 选择列的工作方式与 dplyr 的 select() 相同.所以让我们玩这个。我将使用 mtcars 的子集:
mtcars <- mtcars[1:2, 1:5]
mtcars
## mpg cyl disp hp drat
## Mazda RX4 21.0 6 160 110 3.90
## Mazda RX4 Wag 21.0 6 160 110 3.90

您可以通过 select() 使用正索引和负索引:
select(mtcars, mpg, cyl)
## mpg cyl
## Mazda RX4 21 6
## Mazda RX4 Wag 21 6

select(mtcars, -mpg, -cyl)
## disp hp drat
## Mazda RX4 160 110 3.9
## Mazda RX4 Wag 160 110 3.9

也适用于 select() ,混合正负指数是没有意义的。但不是抛出错误, select()似乎忽略了与第一个具有不同符号的所有索引:
select(mtcars, mpg, -hp, cyl)
## mpg cyl
## Mazda RX4 21 6
## Mazda RX4 Wag 21 6

select(mtcars, -mpg, hp, -cyl)
## disp hp drat
## Mazda RX4 160 110 3.9
## Mazda RX4 Wag 160 110 3.9

如您所见,结果与之前完全相同。

对于您的示例 gather() ,你使用这两行:
long_02_df <- gather(wide_df, my_key, my_value, second, first, -third)
long_03_df <- gather(wide_df, my_key, my_value, -third, second, first)

根据我上面显示的内容,这些行与以下内容相同:
long_02_df <- gather(wide_df, my_key, my_value, second, first)
long_03_df <- gather(wide_df, my_key, my_value, -third)

请注意,第二行中没有任何内容可以表明您喜欢的键顺序。它只说 third应该省略。

关于r - 键排序与使用 gather() 的原始列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592533/

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