R 如何将集合转换为集合成员的指示器?

R 如何将集合转换为集合成员的指示器?,r,postgresql,dplyr,R,Postgresql,Dplyr,我所拥有的每一次观察的数据都是一组味道。我想将那些在PostgreSQL中作为text[]数组存在的集合转换为单个味道的存在的指示器,因为我想检查味道是如何结合在一起的 我现在所做的工作正在进行中,但实际上我希望运行更复杂的变体,我有一种预感,即我收集数据的方式远不如它可能的优雅。我尝试使用tidyr和dplyr包,但看不到如何应用它们 有更好的方法使用R吗 以下是一些示例代码: 图书馆PostgreSQL pg任何postgres解决方案都将变得不那么优雅。您必须使用交叉表,这将需要为每种口味

我所拥有的每一次观察的数据都是一组味道。我想将那些在PostgreSQL中作为text[]数组存在的集合转换为单个味道的存在的指示器,因为我想检查味道是如何结合在一起的

我现在所做的工作正在进行中,但实际上我希望运行更复杂的变体,我有一种预感,即我收集数据的方式远不如它可能的优雅。我尝试使用tidyr和dplyr包,但看不到如何应用它们

有更好的方法使用R吗

以下是一些示例代码:

图书馆PostgreSQL
pg任何postgres解决方案都将变得不那么优雅。您必须使用交叉表,这将需要为每种口味定义列

这里有一种使用dplyr和tidyr的方法:


任何postgres解决方案都将变得不那么优雅。您必须使用交叉表,这将需要为每种口味定义列

这里有一种使用dplyr和tidyr的方法:

基于的答案,以下是内置于函数中的版本:

set_to_indicator <- function(df, var) {

    library(dplyr)
    library(tidyr)
    df %>%
        mutate_(indicator=~TRUE) %>%
            spread_(var, "indicator", fill=FALSE)
}

set_to_indicator(df, "flavour")
请注意,我使用的是spread的标准评估版本,即spread_u。似乎很难添加这么多代码作为注释,因此我将其作为单独的答案。

基于的答案,下面是内置在函数中的版本:

set_to_indicator <- function(df, var) {

    library(dplyr)
    library(tidyr)
    df %>%
        mutate_(indicator=~TRUE) %>%
            spread_(var, "indicator", fill=FALSE)
}

set_to_indicator(df, "flavour")

请注意,我使用的是spread的标准评估版本,即spread_u。似乎很难添加这么多的代码作为注释,所以我单独回答了这个问题。

对不起,问题是什么?有没有办法将本例中的集合样式转换为比此更优雅的指示器:LibraryReforme2 temp抱歉,问题是什么?在这种情况下,有没有一种方法可以将味道转变成比这更优雅的指标:LibraryReforme2 temp为什么我们有~before TRUE?这里我使用的是安全版本的mutate。看看“nse”小插曲。谢谢你的回答,这看起来有点像我失败的尝试。我在下面做了一个你答案的函数版本。有趣的是,来自dplyr的TBL似乎没有直接输入到mutate_2;,所以我使用as.data.framedf%>%。为什么在为真之前有~呢?这里我使用的是mutate的安全版本。看看“nse”小插曲。谢谢你的回答,这看起来有点像我失败的尝试。我在下面做了一个你答案的函数版本。有趣的是,来自dplyr的TBL似乎并没有直接输入到mutate\中,所以我使用as.data.framedf%>%。
dput(df)
structure(list(id = c("a", "a", "b", "b", "b", "b", "c", "c"), 
    date = structure(c(15706, 15706, 15706, 15706, 15737, 15737, 
    15706, 15706), class = "Date"), flavour = c("Chocolate", 
    "Vanilla", "Strawberry", "Vanilla", "Raspberry", "Lemon", 
    "Raspberry", "Blueberry")), .Names = c("id", "date", "flavour"
), row.names = c(NA, 8L), class = "data.frame")
library(dplyr)
library(tidyr)
df %>%
    mutate_(indicator=~TRUE) %>%
    spread('flavour', 'indicator', fill=FALSE)
set_to_indicator <- function(df, var) {

    library(dplyr)
    library(tidyr)
    df %>%
        mutate_(indicator=~TRUE) %>%
            spread_(var, "indicator", fill=FALSE)
}

set_to_indicator(df, "flavour")