gpt4 book ai didi

r - 在 R 中维护子集数据帧的顺序

转载 作者:行者123 更新时间:2023-12-01 13:51:51 27 4
gpt4 key购买 nike

我有一个数据框df:

V1  V2  V3
1 227 Day1
2 288 Day2
3 243 Day3
4 258 Day4
5 274 Day5
6 245 Day6
7 254 Day7
8 249 Day8
9 230 Day9
10 244 Day10

我想对 df 进行子集化,其中 V1 按顺序包含 5,1,7,3。我使用了 subset(df,V1 %in% c(5,1,7,3)) 但我得到的是:

V1  V2  V3
1 227 Day1
3 243 Day3
5 274 Day5
7 254 Day7

我想将 V1 中的行顺序保持为 5,1,7,3 而不是 1,3,5,7。我怎样才能得到输出:

V1  V2  V3
5 274 Day5
1 227 Day1
7 254 Day7
3 243 Day3

最佳答案

这可能过于复杂,但我会按如下方式处理此任务:

示例数据框:

(data2 <- data.frame(V1=1:10, V2=letters[1:10]))
## V1 V2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 d
## 5 5 e
## 6 6 f
## 7 7 g
## 8 8 h
## 9 9 i
## 10 10 j

让我们找到匹配的行(NA - 没有匹配,i - i - 第一个值被匹配):

(m <- match(data2$V1, c(5,1,7,3)))
## [1] 2 NA 4 NA 1 NA 3 NA NA NA

现在我们选择匹配的行并相应地排列它们:

data2[!is.na(m),][order(na.omit(m)),]
## V1 V2
## 5 5 e
## 1 1 a
## 7 7 g
## 3 3 c

另一方面,如果您知道 V1 由连续的自然数(从 1 开始)组成,那么解决方案很简单,如 1-2-3:

data2[c(5,1,7,3),]
## V1 V2
## 5 5 e
## 1 1 a
## 7 7 g
## 3 3 c

关于r - 在 R 中维护子集数据帧的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461433/

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