【发布时间】:2017-11-19 04:37:06
【问题描述】:
编辑 --- 我已将问题清理为范围更小。
我正在尝试以以下形式聚合数据框,但已卡住。
这是来自电话系统的 isdn 日志输出,因此它包含在整个日志中同时发生的呼叫。这些呼叫属于呼入性质而不是呼出性质。
数据框如下所示:
"V1" "V2""V3""V4" "V5" "V6" "V7" "V8"
"1" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189056:" "Oct 2 00:00:01.326 AEDST: ISDN Se0/0/0:15 Q931: RX <- SETUP pd = 8 callref = 0x174E "
"2" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189057:" " Bearer Capability i = 0x8090A3 "
"3" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189058:" " Standard = CCITT "
"4" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189059:" " Transfer Capability = Speech "
"5" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189060:" " Transfer Mode = Circuit "
"6" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189061:" " Transfer Rate = 64 kbit/s "
"7" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189062:" " Channel ID i = 0xA1839B "
"8" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189063:" " Preferred, Channel 27 "
"9" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189064:" " Calling Party Number i = 0x2183, '00123456789' "
"10" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189065:" " Plan:ISDN, Type:National "
"11" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189066:" " Called Party Number i = 0xC1, '0123456' "
"12" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189067:" " Plan:ISDN, Type:Subscriber(local) "
"13" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189068:" " Sending Complete"
"14" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189069:" "Oct 2 00:00:01.334 AEDST: ISDN Se0/0/0:15 Q931: TX -> CALL_PROC pd = 8 callref = 0x974E "
"15" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189070:" " Channel ID i = 0xA9839B "
"16" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189071:" " Exclusive, Channel 27"
"17" "Oct" "" "2" "00:00:02" "10.20.5.31" "82189072:" "Oct 2 00:00:01.350 AEDST: ISDN Se0/0/0:15 Q931: TX -> ALERTING pd = 8 callref = 0x974E "
"18" "Oct" "" "2" "00:00:02" "10.20.5.31" "82189073:" " Progress Ind i = 0x8088 - In-band info or appropriate now available "
"19" "Oct" "" "2" "00:00:02" "10.20.5.31" "82189074:" "Oct 2 00:00:01.358 AEDST: ISDN Se0/0/0:15 Q931: TX -> CONNECT pd = 8 callref = 0x974E"
"20" "Oct" "" "2" "00:00:02" "10.20.5.31" "82189075:" "Oct 2 00:00:01.382 AEDST: ISDN Se0/0/0:15 Q931: RX <- CONNECT_ACK pd = 8 callref = 0x174E"
"21" "Oct" "" "2" "00:00:19" "10.20.5.30" "81488302:" "Oct 2 00:00:18.210 AEDST: ISDN Se0/0/0:15 Q931: TX -> DISCONNECT pd = 8 callref = 0x9AC7 "
"22" "Oct" "" "2" "00:00:19" "10.20.5.30" "81488303:" " Cause i = 0x8090 - Normal call clearing"
"23" "Oct" "" "2" "00:00:19" "10.20.5.30" "81488304:" "Oct 2 00:00:18.290 AEDST: ISDN Se0/0/0:15 Q931: RX <- RELEASE pd = 8 callref = 0x1AC7"
"24" "Oct" "" "2" "00:00:19" "10.20.5.30" "81488305:" "Oct 2 00:00:18.314 AEDST: ISDN Se0/0/0:15 Q931: TX -> RELEASE_COMP pd = 8 callref = 0x9AC7"
"25" "Oct" "" "2" "00:00:21" "10.20.5.31" "82189076:" "Oct 2 00:00:21.053 AEDST: ISDN Se0/1/0:15 Q931: RX <- SETUP pd = 8 callref = 0x093A "
我希望数据集如下所示:
"V1" "V2""V3""V4" "V5" "V6" "V7" "UniqueId" "V8"
"1" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189056:" "0x174E" "Oct 2 00:00:01.326 AEDST: ISDN Se0/0/0:15 Q931: RX <- SETUP pd = 8 callref = 0x174E "
"2" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189057:" "0x174E" " Bearer Capability i = 0x8090A3 "
"3" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189058:" "0x174E" " Standard = CCITT "
....
"21" "Oct" "" "2" "00:00:19" "10.20.5.30" "81488302:" "0x9AC7" "Oct 2 00:00:18.210 AEDST: ISDN Se0/0/0:15 Q931: TX -> DISCONNECT pd = 8 callref = 0x9AC7 "
重新迭代:
调用引用是识别此数据集的唯一方法,也称为 作为 callref 例如 0x174E (这是找到唯一调用的唯一方法 在数据集中)。 这是所请求数据框中的新列 (UniqueId)。
下面的任何行也将在新列中粘贴相同的 callref id,直到它遇到另一行,该行声明相同的 callref 或另一个 call ref。
-
每次显示 callref 时,任何可以将这些行合并为一行的人都会获得奖励积分。请注意,这可能会在几种不同的状态下发生(当包含 callref 的行还包含 TX -> CALL_PROC、TX -> ALERTING、TX -> CONNECT、RX
李>
例如,我将第 1,2 和 3 行的 V7 列合并在一起,因为它们属于同一个 callref
"V1" "V2""V3""V4" "V5" "V6" "V7" "UniqueId" "V8"
"1" "Oct" "" "2" "00:00:01" "10.20.5.31" "82189056:" "0x174E" "Oct 2 00:00:01.326 AEDST: ISDN Se0/0/0:15 Q931: RX <- SETUP pd = 8 callref = 0x174E \n Bearer Capability i = 0x8090A3 \n Standard = CCITT"
感谢任何答案。
【问题讨论】:
-
你能把它做成一个可重现的例子,这样我就可以在 R 中使用它了吗?我很难理解你的数据集是如何布局的。请查看文档以获取可重现的示例。
-
我现在用一个可以复制到文本文件中的示例更改了原始表,然后使用 read.table() 将其导入到 r 中。这可能不优雅,但这是我知道该怎么做。如果此更改有任何帮助,请告诉我。
-
请使用
dput(log_entry)的输出而不是那种文本格式来编辑问题,这样我们将获得您数据的精确副本。 -
我也对您希望数据最终的显示方式有些困惑。您的输出示例与输入完全相同。
-
对问题进行了更多清理。我已经做了一个 str_split_fixed 来制作更多的列并使数据框更加充实。