在R中对输出进行子集以生成摘要

时间:2017-10-11 12:49:48

标签: r dplyr subset

以下是我执行的一系列营销活动的数据框(DF)。成功百分比显示受访者的数量,而沟通类型指的是频道 - 脸书,推特等(Ai- FB,L1-Linkedin)。笔记本电脑,新手和鼠标指的是构成句子的单词。最初的数据框有一句话 - 比如购买一台新笔记本电脑并免费获得鼠标。我用qdap解析了上面的内容并在下面生成了DF。

 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))

但这不起作用。

2 个答案:

答案 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

答案 1 :(得分:0)

我不完全确定这是你想要的,但无论如何我很确定你想要summarise_at

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