gpt4 book ai didi

r - 从列名中的正则表达式创建向量

转载 作者:行者123 更新时间:2023-12-01 22:32:17 25 4
gpt4 key购买 nike

我有一个数据框,其中的列代表物种。物种隶属关系编码在列名的后缀中:

Ac_1234_AnyString

第二个下划线 (_) 后的字符串表示物种隶属关系。我想根据等级相关性绘制一些网络,并且我想根据它们的物种隶属关系为物种着色,稍后当我使用库(qgraph)创建 fruchtermann-rheingold 图时。我之前通过按 name_suffix 对 df 进行排序然后通过手动计算向量来创建向量来完成此操作:

list.names <- c("SG01", "SG02")
list <- vector("list", length(list.names))
names(list) <- list.names
list$SG01 <- c(1:12)
list$SG02 <- c(13:25)
str(list)
List of 2
$ SG01 : int [1:12] 1 2 3 4 5 6 7 8 9 10 ...
$ SG02 : int [1:13] 13 14 15 16 17 18 19 20 21 22 ...

对于我正在处理的大型数据集来说,这非常乏味。问题是,如何避免手动排序和计数,并根据后缀和数据框中的位置提取向量(或列表)。我知道我可以通过以下方式创建一个带有后缀信息的向量

indx <- gsub(".*_", "", names(my_data))
str(indx)
chr [1:29]
"4" "6" "6" "6" "6" "6" "11" "6" "6" "6" "6" "6" "3" "18" "6" "6" "6" "5" "5"
"6" "3" "6" "3" "6" "NA" "6" "5" "4" "11"

现在我需要创建包含所有“4”、“6”等位置的向量:

List of  7
$ 4: int[1:2] 1 28
$ 6: int[1:17] 2 3 4 5 6 8 9 10 11 12 15 16 17 20 22 24 26
$ 11: int[1:2] 7 29
....

谢谢。

最佳答案

你可以试试:

sapply(unique(indx), function(x, vec) which(vec==x), vec=indx)

# $`4`
# [1] 1 28

# $`6`
# [1] 2 3 4 5 6 8 9 10 11 12 15 16 17 20 22 24 26

# $`11`
# [1] 7 29

# $`3`
# [1] 13 21 23

# $`18`
# [1] 14

# $`5`
# [1] 18 19 27

# $`NA`
# [1] 25

关于r - 从列名中的正则表达式创建向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29074430/

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