假设我有以下数据表
x y z
1: 1 1 100
2: 1 1 100
3: 1 1 100
4: 1 2 200
5: 1 2 100
6: 1 2 100
7: 2 1 200
8: 2 1 200
9: 2 1 100
10: 2 2 200
11: 2 2 200
12: 2 2 200
DT = setDT(structure(list(x = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L), y = c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L
), z = c(100, 100, 100, 200, 100, 100, 200, 200, 100, 200, 200,
200)), .Names = c("x", "y", "z"), row.names = c(NA, -12L), class = "data.frame"))
我需要创建一个新列,对于每一行,计算特定给定值(100)出现在列z中的特定组合x,y的数量(这就是我所指的“类似的行“)。实际上,我需要这样做两次,因为我需要为z中的每个可能值添加一个新列,即100和200.
结果数据表应如下所示:
x y z hundred two_hundred
1: 1 1 100 3 0
2: 1 1 100 3 0
3: 1 1 100 3 0
4: 1 2 200 2 1
5: 1 2 100 2 1
6: 1 2 100 2 1
7: 2 1 200 1 2
8: 2 1 200 1 2
9: 2 1 100 1 2
10: 2 2 200 0 3
11: 2 2 200 0 3
12: 2 2 200 0 3
请注意,共享相同x和y组合的所有行也将在列100和two_hundred中共享相同的值,而不管它们在z中的值。
此外,我需要摆脱冗余行和列z,以便我有一个更短的数据表。
DT <- DT %>% unique(by=c("x","y"))
DT [,z:=NULL]
最终产品将是:
x y hundred two_hundred
1: 1 1 3 0
2: 1 2 2 1
3: 2 1 1 2
4: 2 2 0 3
哪种方法最简单?如果冗余行的计数和删除都可以通过一个命令完成,那将会很有趣。
(请尽可能使用dplyr命令)
我是R的编程新手,所以如果你们能给我一个简单的语言回答,我将不胜感激,因为我还没有熟悉R中所有最常见的结构和程序(从周期的过渡 - 就像在Java中以矩阵方式使用Java算法一直非常艰难......)
提前致谢。这也是我在本网站的第一个问题。