我正在尝试找出处理同一列具有不同数量的值的数据的最优雅的方法,例如,图像的不同数量的标签:
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()放到单个标签中,但是我不知道把结果放在哪里。
有什么建议吗?
发布于 2017-02-02 22:54:37
1) grepl我们可以把树变绿:
subset(image.data, grepl("tree", image.tags))
## image.id image.tags
## 1 img1 house#garden#sky#tree
## 3 img3 house#tree2)嵌套另一种可能是基于以下事实: data.frame列可以是向量列表,每行一个向量。这里的DF就是这样一个data.frame,我们可以在每个这样的向量中查找"tree":
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, tree3) long form还有另一种可能是转换为long form:
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或者可能需要的是列出包含树的那些组的所有行:
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 treehttps://stackoverflow.com/questions/42005174
复制相似问题