首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据“列”列表的内容设置数据框架

根据“列”列表的内容设置数据框架
EN

Stack Overflow用户
提问于 2013-04-28 20:53:41
回答 3查看 6.6K关注 0票数 4

架设

我有一个列表矩阵,其中一个“列”是一个列表(我意识到它是一个奇怪的数据集,但我发现它对于其他操作很有用)。列表的每个条目都是;(1)空(整数(0)),(2)整数,或(3)整数向量。

例如R对象"d.f",其中d.f$ID是索引向量,d.f$Basket_List是列表。

代码语言:javascript
运行
复制
ID <- c(1,2,3,4,5,6,7,8,9)
Basket_List <- list(integer(0),c(123,987),c(123,123),456,
                    c(456,123),456,c(123,987),c(987,123),987)
d.f <- data.frame(ID)
d.f$Basket_List <- Basket_List

我的问题

问题1

根据"Basket_List“是否包含某些值,我想创建一个新的数据集,它是初始值的子集。例如d.f中所有行的子集,使得Bask_list具有"123“或"123”& "987“-或其他更复杂的条件。

我试过以下每一种变体,但都没有用。

代码语言:javascript
运行
复制
d.f2 <- subset(d.f, 123 %in% Basket_List)
d.f2 <- subset(d.f, 123 == any(Basket_List))
d.f2 <- d.f[which(123 %in% d.f$Basket_List,]
# should return the subset, with rows 2,3,5,7 & 8

问题2

我的另一个问题是,我将在数百万行(它是事务数据)上运行这个操作,所以我想尽可能地优化它以提高速度(我现在有一个复杂的for循环,但它需要太多的时间)。

另一种数据设置

如果您认为它可能有用,则还可以将数据设置为:

代码语言:javascript
运行
复制
ID <- c(1,2,2,3,3,4,5,5,6,7,7,8,8,9)
Basket <- c(NA,123,987,123,123,456,456,123,456,123,987,987,123,987)
alt.d.f <- data.frame(ID,Basket)
EN

Stack Overflow用户

发布于 2017-05-30 07:14:18

使用purrr & dplyr库(和magrittr管道操作符)的一个稍微容易读的解决方案是:

代码语言:javascript
运行
复制
library(dplyr)
library(purrr)    

d.f %>% filter(map_lgl(Basket_List,contains,as.integer(123)))
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16267750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档