Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检查哪些单元格(包含列表)包含特定值?_R_List - Fatal编程技术网

R 检查哪些单元格(包含列表)包含特定值?

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,因为它只是测试整个列(而不是该列中的每个单元格) 我曾经使用

在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,因为它只是测试整个列(而不是该列中的每个单元格)

我曾经使用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