如何将字符向量列表与R

时间:2018-08-01 21:28:07

标签: r

我的数据形状非常简单:

set.seed(1337)
id <- c(1:4)
values <- runif(0, 1, n=4)
df <- data.frame(id, values) 
df
  id     values
1  1 0.57632155
2  2 0.56474213
3  3 0.07399023
4  4 0.45386562

这并不简单:我有一个与每一行匹配的字符值数组列表,每个列表项可以为空,或者可以包含多达5个单独的标签,例如...

tags <- list(
  c("A"),
  NA,
  c("A", "B", "C"),
  c("B", "C")
)

使用标签作为分类器时,我将被问到各种问题,例如,“带有B标签的所有行的平均值是多少?”或“多少行同时包含标签A和标签C?”

您会选择哪种方式存储标签,以便我可以这样做?我的现实数据文件非常大,这使得尝试unlist或其他命令变得困难。

2 个答案:

答案 0 :(得分:1)

那不是很难。您只需要将您的列表分配给df创建一个新列作为名称标签,然后我们进行unnest,我就列出了您列出的问题的解决方案。

library(tidyr)
library(dplyr)

df$tags=list(
     c("A"),
     NA,
     c("A", "B", "C"),
     c("B", "C")
 )
Newdf=df%>%tidyr::unnest(tags)

Q1.

Newdf%>%group_by(tags)%>%summarise(Mean=mean(values))%>%filter(tags=='B')
   tags              Mean
  <chr>             <dbl>
1     B 0.263927925960161

Q2.

Newdf%>%group_by(id)%>%dplyr::summarise(Count=any(tags=='A')&any(tags=='C'))
# A tibble: 4 x 2
     id Count
  <int> <lgl>
1     1 FALSE
2     2    NA
3     3  TRUE
4     4 FALSE

答案 1 :(得分:1)

以下是获得预期输出的几个选项。在数据集中创建{tags}作为list列和unnest(已经从注释中创建),然后通过获取{{ 1}}的逻辑向量。同样,“ {values”的summarise,其中“标记”为“ B”

sum