【问题标题】:Getting multiple sub-totals & group_by in a table form in R在 R 中以表格形式获取多个小计和分组依据
【发布时间】:2016-05-18 07:00:24
【问题描述】:

我有一个电话数据集(CSV)。它包含几列,但重要的列是“打电话的人”和“打电话的人”。数据是所有字符串(名称)。完成的全部工作是在这些两列数据的字符串上。如示例:

Caller  Receiver
Alice   Mary
Kate    Betty
Alice   Betty
Mary    Kate | Jane
Jane    Alice

所需的输出是一个人拨打电话的次数和拨打电话的人的形式。例如,上面的输出如下:

Caller  Receiver    CallFreq
Alice   Mary        1
        Betty       1
Kate    Betty       1
Mary    Kate        1
        Jane        1
Jane    Alice       1

此人拨打的电话总数可以包含在上表或另一个表中。

【问题讨论】:

  • 您输入的格式是什么?首先,您需要使数据可读。
  • 我在 Q 中添加了更多细节。简单地说,它是一个包含多列的 CSV。但我的工作仅限于两列名称/字符串(呼叫者、接收者)。我正在尝试对这些名称和计数频率进行分组,以得到类似的输出,如图所示。谢谢。
  • 非常感谢@MrFlick!!!

标签: r


【解决方案1】:

tidyr 包中的 unnest 函数在这种情况下非常有用。

output <-
  mydata %>% 
  group_by(Caller) %>%
  summarise(Receiver = paste(unique(Receiver), collapse=' | ')) %>%
  mutate(Receiver = strsplit(Receiver, ' \\| ')) %>%
  unnest(Receiver) %>%
  group_by(Caller) %>%
  mutate(CallFreq = 1, TotalCalls = n_distinct(Receiver))

要直接运行上述代码,您需要使用 dplyr、magrittr 和 tidyr 包。

【讨论】:

  • 谢谢。我试过代码。它给了我一个错误“错误:列'Call3'(NILSXP,classes = NULL)不受支持的类型”知道如何解决这些问题,因为我的两个列都是字符串?
  • 嗯我定义原始数据的方式是 mydata stackoverflow.com/questions/34054968/… 建议的临时修复是使用 $'y ' 而不是 $y,所以如果适用,可以尝试在有问题的列上执行此操作?您正在使用的“Call3”列是什么?您也可以尝试将列转换为因子。
  • 感谢@coyin,我昨天尝试过“修复”。它对我不起作用。
  • 我正在使用> read.csv(data, header = False, stringsAsFactors = False)
  • 这很奇怪。我尝试使用字符而不是因子,它对我有用。使用下面的示例对您有用吗? mydata
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多