gpt4 book ai didi

r - 如何识别与向量匹配的行

转载 作者:行者123 更新时间:2023-12-03 15:20:59 24 4
gpt4 key购买 nike

我想确定哪一行与向量中的信息匹配。例如,我将使用 iris数据集(采用 tibble 格式以更好地近似我的情况):iris %>% as_tibble() .然后我有一个单行的小标题,它直接来自原始数据集:

choice <– structure(list(Sepal.Length = 4.5, Sepal.Width = 2.3, Petal.Length = 1.3, 
Petal.Width = 0.3, Species = structure(1L, .Label = c("setosa",
"versicolor", "virginica"), class = "factor")), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame"))

# A tibble: 1 x 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 4.5 2.3 1.3 0.3 setosa
我想确定哪一行完全匹配。我认为如果它是一个向量会更好,但这将取决于函数是什么;如果是这种情况,那么您只需添加 as.numeric()到那个 choice .
正确的行是 42。

最佳答案

一种选择是 Map .与 Map ,我们比较 ( == ) 'iris' 和 'choice' 的对应元素(这里的单位是一列)(因为选择只有一行,该元素被回收),返回一个 listlogical向量然后是 Reduce d 到单个逻辑 vector&即它检查 list 的元素对应元素(iris 的列转换为逻辑),如果所有元素都为 TRUE,则返回 TRUE),然后用 which 换行获取该逻辑向量的位置索引

which(Reduce(`&`, Map(`==`, iris, choice)))
#[1] 42

或者另一种选择是复制“选择”的行以使暗度与“虹膜”相同,执行 == , 使用 rowSums并检查它是否等于列数
library(tidyr)
which(rowSums(iris == uncount(choice, nrow(iris))) == ncol(iris))
#[1] 42

或者这可以在 tidyverse 中完成.创建行号列( row_number() ),使用 filterif_all循环遍历除 'rn' 之外的列名,与提取的相应列 'choice' 进行比较,以便仅当该行的所有列都为 TRUE 时才返回该行( if_allif_any - 是其中之一), pull列 'rn' 作为向量
library(dplyr)
iris %>%
mutate(rn = row_number()) %>%
filter(if_all(all_of(names(choice)),
~ . == choice[[cur_column()]])) %>%
pull(rn)
#[1] 42

关于r - 如何识别与向量匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66922621/

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