gpt4 book ai didi

r - R `unique` 是否总是以相同的顺序返回值?

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

愚蠢的例子:

df <- data.frame(group=rep(LETTERS, each=2), value=1:52)
res <- unlist(lapply(unique(df$group), function(x) mean(subset(df, group==x)$value)))
names(res) <- unique(df$group)

威尔 res总是?
   A    B    C    D    E    F    G    H    I    J    K    L    M    N    O    P 
1.5 3.5 5.5 7.5 9.5 11.5 13.5 15.5 17.5 19.5 21.5 23.5 25.5 27.5 29.5 31.5
Q R S T U V W X Y Z
33.5 35.5 37.5 39.5 41.5 43.5 45.5 47.5 49.5 51.5

或者会不会发生在第 2 行计算的平均值与第 3 行的名称不匹配的情况?我猜这取决于 unique 的底层实现在 R 基础中,但我不确定在哪里可以找到它。

最佳答案

根据 ?unique :

‘unique’ returns a vector, data frame or array like ‘x’ but with duplicate elements/rows removed.



此描述为您提供了对排序的完整描述——它将与第一个唯一元素的顺序相同。 (我想我没有看到@joran 看到的不同排序的回旋余地。)例如,
unique(c("B","B","A","C","C","C","B","A"))

会导致
[1] "B" "A" "C"

我相信 unique(x)通常将与(但比)相同
x[!duplicated(x)]

如果想看内码,见 here : 运动部件有点像
k = 0;
switch (TYPEOF(x)) {
case LGLSXP:
case INTSXP:
for (i = 0; i < n; i++)
if (LOGICAL(dup)[i] == 0)
INTEGER(ans)[k++] = INTEGER(x)[i];
break;

即,内部表示正是我所说的,它依次通过向量并填充非重复元素。由于文档中没有明确保证排序,因此从理论上讲,这种实现可能会在 future 发生变化,但这几乎是不可能的。

对于您想要做的事情,有更简单的 R 习语
df <- data.frame(group=rep(LETTERS, each=2), value=1:52)
a1 <- aggregate(df$value,list(df$group),mean)

这将返回一个两列数据框,因此您可以使用
setNames(a1[,2],a1[,1])

将其转换为您的格式。或者
library(plyr)
unlist(daply(df,"group",summarise,val=mean(value)))

关于r - R `unique` 是否总是以相同的顺序返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36413440/

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