我有一个问题,我有两个列表。每个都存储了 3 个长度相同的向量。唯一的区别是在 list_A 中我有数值,而在 list_B 中我有逻辑值。我想从 list_B 中提取逻辑向量中真实值的索引,并使用它们的索引从 list_A 中提取值。
listA <- list(c(14,6,4,6,14,5,14,13,4,6,14,14,3,10,14,13,6),c(16,3,8,16,11,5,4,16,17,15,16,10),c(11,5,6,3,5,4,6,13,14,5,5,14,14,13,6,9))
listB <- list(c("FALSE","FALSE","FALSE" ,"FALSE" ,"FALSE" ,"FALSE", "FALSE" ,"FALSE" ,"FALSE" ,"FALSE" ,"FALSE" ,"FALSE" ,"FALSE", "FALSE", "FALSE", "FALSE", "FALSE"),
c("FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "FALSE"),
c("FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "FALSE"))
IDs <- lapply(listB, function(x) which(x==T))
# Which command could I use to extract the numeric value from listA for TRUE cases?
有人可以帮助我吗?娜丁
好吧,您实际上可以直接使用逻辑向量而无需提取索引,例如:
my_vec <- c(2, 5, 12, 8, 0, 90)
my_vec[c(TRUE, TRUE, FALSE, FALSE, FALSE, TRUE)]
但是您提供的示例中的主要问题是这listB
不是真正的逻辑(布尔值),其中的元素属于字符类型,因为您在它们周围使用了引号,因此如果您的原始数据是字符类型,则需要将其转换为逻辑或使用=="TRUE"
因为这只能用 vectros(而不是列表)来完成,而且你已经有两个列表可以循环,mapply
所以我基本上会使用:
mapply(function(vec1, vec2) vec2[vec1=="TRUE"], listB, listA)
或者
mapply(function(vec1, vec2) vec2[as.logical(vec1)], listB, listA)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句