【问题标题】:R How to print non zero frequency table values in rowsR如何在行中打印非零频率表值
【发布时间】:2014-12-19 23:56:44
【问题描述】:

表格打印行和列以及交叉点的出现次数。我有一张几乎全为零的大桌子。表格是否可以按行打印,第一列为表格行的名称,第二列为表格列的名称,第三列为出现次数。

library(data.table)
nSamples=10
set.seed(13)
d <- data.table(id=sample(1001:1010,nSamples,replace=T),
                own=sample(paste('h-',7:10,sep=''),nSamples,replace=T))
tbl<-table(d)
print(tbl)

输出看起来像

      own
id     h-10 h-8 h-9
  1001    0   1   2
  1003    1   0   0
  1004    1   0   0
  1006    0   1   0
  1008    0   0   2
  1009    1   0   0
  1010    0   0   1

我想要的输出是

     id  own Freq
   1003 h-10    1
   1004 h-10    1
   1009 h-10    1
   and so on

注意:问题是通过更正 set.seed 来修改的。

下面提供的答案给出了预期的结果

R> subset(as.data.frame(table(d)),Freq>0)
     id  own Freq
2  1003 h-10    1
3  1004 h-10    1
6  1009 h-10    1
8  1001  h-8    1
11 1006  h-8    1
15 1001  h-9    2
19 1008  h-9    2
21 1010  h-9    1

【问题讨论】:

  • as.data.frame(table(d)) 将获得所需的格式
  • 使用set.seed(123)设置种子
  • 如果您想将结果子集化为仅大于 0 的值,您可以使用 data.table:as.data.table(table(d))[N &gt; 0]

标签: r frequency


【解决方案1】:

1) 转换为long 格式

as.data.frame(table(d))

或者如果您需要data.table

as.data.table(table(d))

2) set.seed 问题

您将&lt;- set.seed 分配给1。正确的方法是:

set.seed(1)

3) 对于子集 Freq >0

setkey(as.data.table(table(d)),N)[N>0]

如果只有0s1s

setkey(as.data.table(table(d)),N)[J(1)]

data.frame 方法

subset(as.data.frame(table(d)),Freq>0)

编辑

您可以避免使用table,然后再转换回long 表单(由@Arun 评论)。而是

 d[, .N, by=names(d)]

【讨论】:

  • @Arun 谢谢,是的。我只是在遵循 OP 的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2017-04-20
  • 1970-01-01
相关资源
最近更新 更多