gpt4 book ai didi

r - 如何创建一个列表,使列表中的每个元素都是基于 R 中矩阵的数据框的行名称

转载 作者:行者123 更新时间:2023-12-02 15:44:40 24 4
gpt4 key购买 nike

我有一个示例数据帧 s1

s1=data.frame(c1=c("red","green","blue","yellow","orange","black","white"),col1=c("car1","car2","car3","car4","car5","car6","car7"))
s1=s1 %>% remove_rownames %>% column_to_rownames(var="c1")

只有一列-col1,行名称为红色、绿色、蓝色等。

       col1
red car1
green car2
blue car3
yellow car4
orange car5
black car6
white car7

我还有一个只包含 1 和 0 的矩阵

m1= matrix(c(1,0,0,1,0),nrow =7, ncol =3, byrow = TRUE) 
     [,1] [,2] [,3]
[1,] 1 0 0
[2,] 1 0 1
[3,] 0 0 1
[4,] 0 1 0
[5,] 0 1 0
[6,] 1 0 0
[7,] 1 0 1

我想创建一个列表,使得列表中的每个元素都包含 s1 的行名称,前提是矩阵的相应元素为 1。我需要对矩阵的所有列进行迭代。

输出应该看起来像这样

l1=list(c("red","green","black","white"),c("yellow","orange"),c("green","blue","white"))

我尝试使用此代码,但无法将其应用到每一列

row.names(s1)[which(m1[,1]==1)]

请注意,实际的数据帧和矩阵都要大得多。谢谢!

最佳答案

在逻辑矩阵上使用 asplit 按“m1”的列进行拆分,并使用索引对“s1”的行名进行子集化

lapply(asplit(m1 == 1, 2), function(x) row.names(s1)[x])

-输出

[[1]]
[1] "red" "green" "black" "white"

[[2]]
[1] "yellow" "orange"

[[3]]
[1] "green" "blue" "white"

或者使用 applyMARGIN=2 来循环遍历列和子集

apply(m1==1, 2, function(x) row.names(s1)[x])

关于r - 如何创建一个列表,使列表中的每个元素都是基于 R 中矩阵的数据框的行名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74697703/

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