我有以下两个数据框,第一个代表频率,第二个代表个别事件。我正在尝试向第二个数据添加一个列,该数据将第一个数据合并到第二个数据,条件是行/列。
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,但无法弄清楚如何组合它们。
答案 0 :(得分: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