d$Children =-6ren">
gpt4 book ai didi

R,过滤数据框单元格中列表中的元素

转载 作者:行者123 更新时间:2023-12-02 19:53:44 25 4
gpt4 key购买 nike

假设我有一个非常简单的数据集。我有 2 列, parent 姓名, child

> d = data.frame(Parents = c("Mark", "Adam"))
> d$Children = list(c("Kid1", "Kid2"), c("Kid3", "Kid4"))
> d
Parents Children
1 Mark Kid1, Kid2
2 Adam Kid3, Kid4

我想要做的是按 Kid 进行搜索并获取 parent 姓名(以及该 parent 姓名的索引,但我认为这部分很容易)。所以“Kid1”将返回“Mark”。我不知道该怎么做。

我尝试过使用以下内容

which(d$Children = "Kid3")

但是它不起作用,大概是因为数据类型实际上是列表。

有办法解决这个问题吗?在这里使用数据框是一个坏主意吗?是否有我应该在这里使用的替代数据结构,我想在 Python 中我可能尝试过使用字典,但我不确定如何在 R 中解决这个问题。

最佳答案

要过滤元素,请使用 lapply%in%

as.character(d$Parent)[unlist(lapply(d$Children,  `%in%`, x = 'Kid3'))]
#[1] Adam

或者使用 map

as.character(d$Parents)[unlist(Map(`%in%`, "Kid3", d$Children))]
#[1] Adam

输入中的列是factor 类。因此,在提取时可以将其转换为 character


或者另一个选项是stacksubset

subset(stack(setNames(d$Children, d$Parents)), values == "Kid3")$ind

或者使用dplyr/purrr

library(purrr)
library(dplyr)
d %>%
filter(map_lgl(Children, `%in%`, x = "Kid3")) %>%
pull(Parents)
#[1] Adam

或者

deframe(d) %>% 
keep(~ "Kid3" %in% .x) %>%
names
#[1] "Adam"

关于R,过滤数据框单元格中列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530273/

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