R中的字符串数组组合

时间:2014-01-20 03:15:06

标签: arrays string r histogram

我在R开始学习,甚至在很多论坛上都在寻找这个话题,我找不到一个好的答案。也许我没有使用正确的术语进行搜索,或者也许在R中无法进行搜索,所以请为我的无知道歉。

我想知道两位专业人员参与某个项目的次数。除此之外,我想绘制它们在一起被发现时的位置。

我没有使用下面的具体表示法。例如,假设我有以下字符串数组:

Project1: Bob (President), Joe (Vice President), Mary (Participant), Paul (Participant)
Project2: Bob (President), Joe (Vice President), Sue (Participant), Bill (Participant)
Project3: Paul (President), Sue (Vice President), Bob (Participant), Joe (Participant)
Project'n: (...)

输出将是:     鲍勃(总统)&乔(副总统)= 2     鲍勃(总统)&玛丽(参与者)= 1     鲍勃(总统)&保罗(参与者)= 1     鲍勃(参与者)&保罗(总统)= 1     苏(副总统)&乔(参与者)= 1

它一直在继续,我假设这些结果可以在直方图中聚合。我有86个名字,参加了38个不同的项目,分别位于3个不同的位置。

如果可以在R中做任何想法吗?它怎么能完成?我可以使用任何可用的代码模板或文档来获得这个答案吗?

## MY ATTEMPT(START)
Groups <- data.frame (Name=c('Paul','Paul','Paul','Bob','Bob','Sue','Bill'),Group=c('P1','P2','P3','P1','P2','P3','P3'),Role=c('President','President','President','Vice President','Vice President','Participant','Participant'))
Table <- table (Groups)

当我打印'Table'时,它会显示以下输出:

, , Role = Participant

      Group
Name   P1 P2 P3
  Bill  0  0  1
  Bob   0  0  0
  Paul  0  0  0
  Sue   0  0  1

, , Role = President

      Group
Name   P1 P2 P3
  Bill  0  0  0
  Bob   0  0  0
  Paul  1  1  1
  Sue   0  0  0

, , Role = Vice President

      Group
Name   P1 P2 P3
  Bill  0  0  0
  Bob   1  1  0
  Paul  0  0  0
  Sue   0  0  0

现在 - 例如 - 在项目“P1”中,我们可以看到保罗担任总裁,鲍勃担任副总裁。项目“P2”也是如此。在“P3”中,我们有保罗作为总统,苏和比尔都作为参与者。

我现在怀疑如何计算整个项目中给定关系的出现次数。类似的东西:

Paul/President & Bob/Vice = 2 occurrences, 
Paul/President & Sue/Participant = 1 occurrence, 
Paul/President & Bill/Participant = 1 occurrence, etc

基本上是基于特定人/角色组合出现的'hist'。

## MY ATTEMPT(END)

2 个答案:

答案 0 :(得分:1)

现在您已拥有Table,您可以使用apply在不同的轴上计算不同类型关系的出现次数:

每个项目有多少种不同类型的参与者?

> apply(Table, c(2,3), sum)
     Role
Group Participant President Vice President
   P1           0         1              1
   P2           0         1              1
   P3           2         1              0

人物角色组合出现多少次?

> apply(Table, c(1,3), sum)
      Role
Name   Participant President Vice President
  Bill           1         0              0
  Bob            0         0              2
  Paul           0         3              0
  Sue            1         0              0

每个人在哪个项目工作?

> apply(Table, c(1,2), sum)
      Group
Name   P1 P2 P3
  Bill  0  0  1
  Bob   1  1  0
  Paul  1  1  1
  Sue   0  0  1

每个人有多少个项目在工作?

> apply(Table, 1, sum)
Bill  Bob Paul  Sue 
   1    2    3    1 

每个项目涉及多少人?

> apply(Table, 2, sum)
P1 P2 P3 
 2  2  3 

每个角色有多少人?

> apply(Table, 3, sum)
   Participant      President Vice President 
             2              3              2 

答案 1 :(得分:1)

感谢@ScottRitchie提供的建议。经过一些额外的阅读和测试后,我发现了以下内容:

导入的csv文件包含名称,项目和角色的列。我还在最后添加了另一列,就像一个计数器(从头到尾的常量值为1)。

我做了:

Groupings <-read.csv("~/Documents/TCC_BIGDATA/Test.csv", sep=";")
Groupings$Counter <- as.integer(Groupings$Counter)
print(Groupings)

       Project       Name     Role            Counter
1       P1           Paul     President       1
2       P1           Bob      Vice President  1
3       P1           Sue      Participant     1
4       P1           Bill     Participant     1
5       P2           Paul     Vice President  1
6       P2           Bob      Participant     1
7       P2           Bill     President       1
8       P3           Bob      President       1
9       P3           Bill     Vice President  1
10      P3           Sue      Participant     1

名单在列表中显示多少次?

aggregate(Counter ~ Name, data = Groupings, sum)

  Name Counter
1 Bill       3
2  Bob       3
3 Paul       2
4  Sue       2

名称+角色组合在列表中显示多少次?

aggregate(Counter ~ Name + Role, data = Groupings, sum)

  Name           Role Counter
1 Bill    Participant       1
2  Bob    Participant       1
3  Sue    Participant       2
4 Bill      President       1
5  Bob      President       1
6 Paul      President       1
7 Bill Vice President       1
8  Bob Vice President       1
9 Paul Vice President       1

可以进行其他练习和组合。最后,它只是另一种实现相同的方式(@ScottRitchie)来回答我的问题。我认为分享是一个好主意,以便其他人可以申请。