【问题标题】:Collapse duplicated string columns by using SAS or R or Excel使用 SAS 或 R 或​​ Excel 折叠重复的字符串列
【发布时间】:2016-01-31 04:46:24
【问题描述】:

我正在处理这样的数据集:

Event  Group_Involved 
1      A|A|B|C
2      B|A|A|A|C|C|
3      C|C|B
4      B|A

Group_Involved 是一个字符串变量,可以用'|'分隔。

我想计算组之间的交互而不考虑每个组内的交互。

比如说,如果第一个接触点是 A,那么第二个接触点有 x% 的机会是另一组 B。

所以第一步是将上面的表格折叠成这样:

Event  Group_Involved 
1      A|B|C
2      B|A|C
3      C|B
4      B|A

然后我可以计算从A到B的概率。

我在想有没有办法在 R、SAS 或 Excel 中做到这一点?

【问题讨论】:

    标签: r string excel sas collapse


    【解决方案1】:

    这是使用data.table 的一个选项,我们按“事件”分组,将“Group_Involved”按| 拆分,将pasteunique 元素按| 拆分在一起。

     library(data.table)
     setDT(df1)[, list(Group_Involved=paste(unique(strsplit(Group_Involved, 
                              '[|]')[[1]]),collapse='|')), Event]
    #   Event Group_Involved
    #1:     1          A|B|C
    #2:     2          B|A|C
    #3:     3            C|B
    #4:     4            B|A
    

    或者不分组,我们可以分配(:=)

    setDT(df1)[, Group_Involved := unlist(lapply(strsplit(Group_Involved, 
                  '[|]'), function(x) paste(unique(x), collapse='|')))]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      data have;
      input Event  Group_Involved $20.;
      new_group=prxchange('s/([a-z|]*)\1{1,}/$1/i',-1,Group_Involved);
      cards; 
      1      A|A|B|C
      2      B|A|A|A|C|C|
      3      C|C|B
      4      B|A
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 2021-11-17
        • 2022-06-14
        • 2020-11-26
        • 1970-01-01
        相关资源
        最近更新 更多