-1

我有以下两个数据框,第一个代表频率,第二个代表单个事件。我正在尝试向第二个数据添加一列,该列将数据从第一个数据合并到第二个数据,以行/列为条件。

  event a b c
      w 0 1 3
      x 3 4 0
      y 6 0 4
      z 0 0 4

      event person
      w      b
      w      b
      x      a
      x      b
      x      b
      z      c
      z      a
      y      b
      y      c
      y      a
      y      c

counts <- data.frame (event= c("w", "x", "y", "z"), a= c(0, 3, 6, 0), b=c(1, 4, 0, 0), c=c(3, 0, 4, 4))
cases <- data.frame(event=c("w", "w", "x", "x", "x", "z", "z", "y", "y", "y", "y"), 
                        person=c("b", "b", "a", "b", "b", "c", "a", "b", "c", "a", "c"))

目标:

  case person freq
  w      b      1
  w      b      1
  x      a      3
  x      b      4
  x      b      4
  z      c      0
  z      a      0
  y      b      0
  y      c      4
  y      a      6
  y      c      4

没有太大的成功。我能够使用该reshape包生成频率的第一个 DF,但无法弄清楚如何组合它们。

4

1 回答 1

1

"[" 函数可以将两列矩阵作为参数传入矩阵对象。它是 的部分逆table。还有一个as.data.frame.table功能。

mcounts <- data.matrix(counts[-1])
mcounts[ cbind(cases$event, cases$person)]
 [1] 1 1 3 4 4 4 0 0 4 6 4
cases$freq <- mcounts[ cbind(cases$event, cases$person)]
 cases
#------------
   event person freq
1      w      b    1
2      w      b    1
3      x      a    3
4      x      b    4
5      x      b    4
6      z      c    4
7      z      a    0
8      y      b    0
9      y      c    4
10     y      a    6
11     y      c    4

这不是一个确切的解决方案,因为我没有花时间正确标记表格的行:

> tcounts <- data.matrix(tcounts)
> class(tcounts) <- 'table'
> tcounts
     a b c
[1,] 0 1 3
[2,] 3 4 0
[3,] 6 0 4
[4,] 0 0 4
> as.data.frame(tcounts)
   Var1 Var2 Freq
1     A    a    0
2     B    a    3
3     C    a    6
4     D    a    0
5     A    b    1
6     B    b    4
7     C    b    0
8     D    b    0
9     A    c    3
10    B    c    0
11    C    c    4
12    D    c    4
于 2013-11-03T05:21:46.840 回答