首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理R中一列具有不同项数的数据?

如何处理R中一列具有不同项数的数据?
EN

Stack Overflow用户
提问于 2017-02-02 22:46:21
回答 1查看 70关注 0票数 1

我正在尝试找出处理同一列具有不同数量的值的数据的最优雅的方法,例如,图像的不同数量的标签:

代码语言:javascript
复制
image.id <- c("img1", "img2", "img3")
image.tags <- c("house#garden#sky#tree", "house#garden#lake", "house#tree")
image.data <- data.frame(image.id, image.tags)

例如,我们的目标是能够定位包含标签"tree“的行。我的下一步是将标签strsplit()放到单个标签中,但是我不知道把结果放在哪里。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 22:54:37

1) grepl我们可以把树变绿:

代码语言:javascript
复制
subset(image.data, grepl("tree", image.tags))
##   image.id            image.tags
## 1     img1 house#garden#sky#tree
## 3     img3            house#tree

2)嵌套另一种可能是基于以下事实: data.frame列可以是向量列表,每行一个向量。这里的DF就是这样一个data.frame,我们可以在每个这样的向量中查找"tree"

代码语言:javascript
复制
DF <- transform(image.data, image.tags = strsplit(as.character(image.tags), "#"))
subset(DF, sapply(image.tags, function(x) "tree" %in% x))
##       image.id               image.tags
## 1     img1 house, garden, sky, tree
## 3     img3              house, tree

3) long form还有另一种可能是转换为long form:

代码语言:javascript
复制
library(dplyr)
library(tidyr)

image.data %>%
   separate_rows(image.tags) %>% # long form
   filter(image.tags == "tree")
##   image.id image.tags
## 1     img1       tree
## 2     img3       tree

或者可能需要的是列出包含树的那些组的所有行:

代码语言:javascript
复制
image.data %>%
   separate_rows(image.tags) %>% # long form
   right_join(filter(., image.tags == "tree"), by = "image.id") %>%
   select(image.id, image.tags = image.tags.x)
##   image.id image.tags
## 1     img1      house
## 2     img1     garden
## 3     img1        sky
## 4     img1       tree
## 5     img3      house
## 6     img3       tree
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42005174

复制
相关文章

相似问题

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