首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看元素是否包含在列表中

如何查看元素是否包含在列表中
EN

Stack Overflow用户
提问于 2018-03-30 09:59:50
回答 4查看 65关注 0票数 2

我有以下清单

代码语言:javascript
复制
catlist <- list(c("< 30 days","1-3 months","4-6 months"),c("7-12 months"),c("1-3 years"),
                  c("4-5 years","5+ years","never"))

我给出了名字

代码语言:javascript
复制
names(catlist) <- 1:length(catlist)

我还有一个data.table

代码语言:javascript
复制
library(data.table)
tmp <- data.table(variable = c("never","1-3 years"))

我想要做的是,在new_variable中创建一个新变量( tmp ),它将以variable值所属的catlist的名称作为值。

所以最后我想以这个结束

代码语言:javascript
复制
> tmp
    variable new_variable
1:     never            4
2: 1-3 years            3

我试着创建一个函数,但它不起作用

代码语言:javascript
复制
trans_dummy_multiple <- function(dt, var, catlist){

  dt <- tmp # for testing
  var <- "variable" # for testing
  catlist <- list(c("< 30 days","1-3 months","4-6 months"),c("7-12 months"),c("1-3 years"),
                  c("4-5 years","5+ years","never")) # for testing
  names(catlist) <- 1:length(catlist)
  dt[,new_variable:=lapply(catlist,function(x){if(x%in%get(var)){names(x)}})]


}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-30 10:17:40

尝试:

代码语言:javascript
复制
scl<-setDT(stack(catlist))
scl[tmp,on=c(values="variable")]
#      values ind
#1:     never   4
#2: 1-3 years   3
票数 3
EN

Stack Overflow用户

发布于 2018-03-30 10:15:19

您可以使用grep解决方案

代码语言:javascript
复制
tmp <- data.frame(variable = c("never","1-3 years"), stringsAsFactors = F)
df <- transform(tmp, new_variable = sapply(df$variable, function(item) grep(item, catlist)))
df

这会产生

代码语言:javascript
复制
   variable new_variable
1     never            4
2 1-3 years            3
票数 1
EN

Stack Overflow用户

发布于 2018-03-30 10:19:53

下面是使用melt的一个选项

代码语言:javascript
复制
setDT(melt(catlist))[tmp, on = .(value = variable)]
#       value L1
#1      never  4
#2: 1-3 years  3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49572314

复制
相关文章

相似问题

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