R 检查哪些单元格(包含列表)包含特定值?
在R中,我想搜索列中的每个单元格,该列包含一系列列表。我想返回包含特定值的单元格的索引(或返回T/F) 例如,我创建了这个测试数据帧R 检查哪些单元格(包含列表)包含特定值?,r,list,R,List,在R中,我想搜索列中的每个单元格,该列包含一系列列表。我想返回包含特定值的单元格的索引(或返回T/F) 例如,我创建了这个测试数据帧 test <- data.frame(rows = 1:5, values = 0) test$values <- list(1, c(2,3), c(4:6), 4, 0) 在本例中,我希望返回包含值4的单元格(因此第3行和第4行应为true)。我该怎么做?我当前的查询只返回一个TRUE,因为它只是测试整个列(而不是该列中的每个单元格) 我曾经使用
test <- data.frame(rows = 1:5, values = 0)
test$values <- list(1, c(2,3), c(4:6), 4, 0)
在本例中,我希望返回包含值4的单元格(因此第3行和第4行应为true)。我该怎么做?我当前的查询只返回一个TRUE,因为它只是测试整个列(而不是该列中的每个单元格)
我曾经使用for循环解决过这个问题(大致如下)。例如:
test$result因为它是一个列表,您需要使用sapply
/lappy
test$result <- sapply(test$values, function(x) 4 %in% x)
test
# rows values result
#1 1 1 FALSE
#2 2 2, 3 FALSE
#3 3 4, 5, 6 TRUE
#4 4 4 TRUE
#5 5 0 FALSE
purr
包中的map
函数适用于处理以下嵌套数据:
purrr::map_lgl(test$values, ~ 4 %in% .)
[1] FALSE FALSE TRUE TRUE FALSE
如果不创建一个单独的列来保存查询结果,那么就没有办法解决这个问题了?您不必将逻辑向量存储在数据帧中,您只需将其存储为独立向量,并在需要时使用它(尽管您必须确保在数据帧更改时它不会失去同步).@ElleniToumpas如果要将这些行子集化,则不需要为此创建单独的列。我更新了答案,反映了这一点。哦,是的,这个解决方案也有意义。非常感谢。仍在学习在R中运行查询的所有方法。这也是一个很好的解决方案。谢谢你,罗纳克,太棒了!非常感谢。这就是我想要的解决方案类型。使用map_lgl()函数可以为我提供此解决方案所需的工作流类型。
test$result <- sapply(test$values, function(x) 4 %in% x)
test
# rows values result
#1 1 1 FALSE
#2 2 2, 3 FALSE
#3 3 4, 5, 6 TRUE
#4 4 4 TRUE
#5 5 0 FALSE
test[sapply(test$values, function(x) 4 %in% x), ]
# rows values
#3 3 4, 5, 6
#4 4 4
purrr::map_lgl(test$values, ~ 4 %in% .)
[1] FALSE FALSE TRUE TRUE FALSE