gpt4 book ai didi

r - 如何根据 R 中超过 1 列的条件对数据帧行重新排序?

转载 作者:行者123 更新时间:2023-12-03 19:10:55 34 4
gpt4 key购买 nike

问题

我正在尝试根据其他 2 列中的条件对行重新排序。具体来说,我有数百个随机生成的采样横断面的顺序 ID,称为“ID_First”,然后对于每个横断面,都有一个对应的“ID_Next”,表示应该采样的下一个横断面。我正在尝试重新排序行,以便采样横断面按执行顺序而不是基于“ID_First”的原始顺序

我知道数据框可以基于一列或多列数值变量以升序或降序排列,对于因子,可以以“有序”的方式(例如,高、中、低)排列。是否可以根据 ID_first 和 ID_Next 的顺序排列行的顺序?我一直无法弄清楚如何做到这一点,所以我一直在手动进行。

简化的可重现示例

数据

# sequential ID for a small number of randomly generated transects 
ID_First <- seq(1,10,1)

# represents the next transect that should be sampled following ID_First
ID_Next <- c(4,5,8,7,10,2,9,6,3,NA)


# make a dataframe
df <- cbind.data.frame(ID_First, ID_Next)

# look at the df
df

> ID_First ID_Next
> 1 1 4
> 2 2 5
> 3 3 8
> 4 4 7
> 5 5 10
> 6 6 2
> 7 7 9
> 8 8 6
> 9 9 3
> 10 10 NA

因此,如果您从 ID_First 开始等于 1,然后查看相应的 ID_Next 这将表明下一个要采样的横断面是 4。然后您转到 ID_First 等于 4 并且相应的 ID_Next 到下一个采样将是 7,依此类推在。对于此示例,采样顺序将按以下方式进行:1、4、7、9、3、8、6、2、5、10。

理想结果

这是我想要完成的:
>    ID_First ID_Next
> 1 1 4
> 4 4 7
> 7 7 9
> 9 9 3
> 3 3 8
> 8 8 6
> 6 6 2
> 2 2 5
> 5 5 10
> 10 10 NA

现在横断面遵循采样所需的顺序(例如,1 到 4、4 到 7、7 到 9、9 到 3 等到 10)而不是升序 ID_First。



是否有一种简单的方法可以使用 ID_First 等于 1 作为立场重新排序原始数据帧,然后按照 ID_Next 到 ID_Tirst 到 ID_Next 的进展来排列其余的横断面?

最佳答案

您可以使用 ReducematchID_First 找到链至 ID_Next .

df[Reduce(function(i,j) match(df$ID_Next[i], df$ID_First)
, seq_len(nrow(df)), accumulate = TRUE),]
# ID_First ID_Next
#1 1 4
#4 4 7
#7 7 9
#9 9 3
#3 3 8
#8 8 6
#6 6 2
#2 2 5
#5 5 10
#10 10 NA

数据:
df <- data.frame(ID_First = 1:10, ID_Next = c(4,5,8,7,10,2,9,6,3,NA))
df
# ID_First ID_Next
#1 1 4
#2 2 5
#3 3 8
#4 4 7
#5 5 10
#6 6 2
#7 7 9
#8 8 6
#9 9 3
#10 10 NA

关于r - 如何根据 R 中超过 1 列的条件对数据帧行重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62186895/

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