使用data.table R获取摘要的不同方法

时间:2017-06-30 10:41:44

标签: r data.table

temp <- data.table(fir=c("A", "B", "B", "C", "A", "D"), sec=c(1,1,1,1,2,2))

 fir sec
  A   1
  B   1
  B   1
  C   1
  A   2
  D   2

如果我想通过&#34; sec&#34;列,例如只计算出现的次数。我可以试试......

方法a)

 temp[,.N, by=sec]


  sec N
  1:   1 4
  2:   2 2

我们在&#34; sec&#34;。

获得了不同级别的行数

方法b)

 temp[,Num:=.N, by=sec]

相同的摘要,但保留所有列和相同的行数。

 fir sec Num
  A   1   4
  B   1   4
  B   1   4
  C   1   4
  A   2   2
  D   2   2

但是...
如何获得类似方法a)的结果,但是指定新列的名称?我的意思是不需要在以后明确地更改名称 我已经尝试使用Num = .N而没有:=但它不起作用。

如何获得类似方法b)的结果,但是没有明确写出新列的名称而不修改原始数据表? (像ave()) 我的意思是运行这样的东西

 temp[,.N, by=sec]

但是

 fir sec  N
  A   1   4
  B   1   4
  B   1   4
  C   1   4
  A   2   2
  D   2   2

1 个答案:

答案 0 :(得分:2)

我们可以使用rep

temp[,.(Num = rep(.N, .N)), by=sec]

如果我们需要获取其他变量,则一个选项是on

temp[temp[, .(Num = .N), by=sec], on = .(sec)]