2017-10-11 114 views
1

以下是一个数据框(DF),其中包含一系列我进行的市场营销活动。成功百分比显示受访者人数,沟通类型指频道facebook,twitter等(Ai- FB,L1-Linkedin)。笔记本电脑,新的和鼠标是指组成该句子的单词。原始数据帧有一句话说 - 买一台新的笔记本电脑,并获得免费的鼠标。我已经用qdap解析了上面的内容,并在下面生成了DF。在R中设置输出以生成摘要

Sl NO Success_Percentage communication_type Laptop New Mouse 
    1 35.46666667    email    1  0  0 
    2 32.32830821    email    1  0  1 
    3 22.9226361    SMS    0  1  0 

    4 21.88888889    SMS    1  1  0 
    5 40.04085802    FB     0  1  1 
    6 38.7283237    FB     1  0  1 

我已经根据通信类型对DF进行了整理。组成该句子的三个词语下的值表示在通信期间发送的原始句子中是否存在相同的值。

跨越所有通信最常见的关键字是由下面的代码给出

Wordlist2<-as.data.frame(colSums(DF)[colSums(DF)>0]) 

的输出Wordlist2如下

Laptop 4 
    New  3 
    Mouse 3 

我想知道如何获得通过子集上面的输出通讯类型。它可以手动完成,但我想知道是否存在可以执行此操作的程序包。

require(dplyr) 
    DF%>% 
    group_by(communication_type, Success_Percentage)%>% 
    summarise(colSums(DF)) 

但是,这是行不通的。

+0

你确定吗?这是一个连续的价值,并在你的例子中独一无二 –

回答

0

我不能完全肯定这是你想要的,但在任何情况下,我敢肯定你想summarise_at:你想通过组`Success_Percentage`

DF <- read.table(text="Sl_NO Success_Percentage communication_type Laptop New Mouse 
    1 35.46666667    email    1  0  0 
    2 32.32830821    email    1  0  1 
    3 22.9226361    SMS    0  1  0 
    4 21.88888889    SMS    1  1  0 
    5 40.04085802    FB     0  1  1 
    6 38.7283237    FB     1  0  1",stringsAsFactors=F,header=T) 

require(dplyr) 
DF %>% group_by(communication_type) %>% summarise_at(c("Laptop","New","Mouse"),sum) 

# # A tibble: 3 x 4 
# communication_type Laptop New Mouse 
#    <chr> <int> <int> <int> 
# 1    email  2  0  1 
# 2     FB  1  1  2 
# 3    SMS  1  2  0 
+0

谢谢。我需要列的子集,但它的工作很好。 –

1

我不使用dplyr,但我有data.table的解决方案:

#---Input data 
DF <- read.table(text = "Sl_NO Success_Percentage communication_type Laptop New Mouse 
         1 35.46666667    email    1  0  0 
         2 32.32830821    email    1  0  1 
         3 22.9226361    SMS    0  1  0 
         4 21.88888889    SMS    1  1  0 
         5 40.04085802    FB     0  1  1 
         6 38.7283237    FB     1  0  1", header = T) 

DF <- as.data.table(DF) #---Convert DF from data.frame to data.table 

DF[, .N, by = communication_type] 

产地:

communication_type N 
1:    email 2 
2:    SMS 2 
3:     FB 2 

编辑:

DF[, .(Laptop = sum(Laptop), New = sum(New), Mouse = sum(Mouse)), by = communication_type] 

产地:

communication_type Laptop New Mouse 
1:    email  2 0  1 
2:    SMS  1 2  0 
3:     FB  1 1  2 
+0

相当不错的解决方案 – amonk

+0

整洁。这很简单。 –