为了账号安全,请及时绑定邮箱和手机立即绑定

R中的频率计数

R中的频率计数

千巷猫影 2019-07-31 10:49:46
R中的频率计数这似乎是一个非常基本的R问题,但我很感激答案。我有一个以下形式的数据框:col1    col2a   ga   ha   gb   ib   gb   hc   i我想将它转化为计数,所以结果将是这样的。我尝试过使用table()函数,但似乎只能获得一列的计数。    a   b   cg   2   1   0h   1   1   0i   0   1   1我怎么在R?
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我不太确定你用过什么,但table对我来说效果很好!


这是一个可重复性最小的例子:


df <- structure(list(V1 = c("a", "a", "a", "b", "b", "b", "c"), 

                     V2 = c("g", "h", "g", "i", "g", "h", "i")), 

                .Names = c("V1", "V2"), class = "data.frame", 

                row.names = c(NA, -7L))

table(df)

#    V2

# V1  g h i

#   a 2 1 0

#   b 1 1 1

#   c 0 0 1

笔记:


尝试table(df[c(2, 1)])(或table(df$V2, df$V1))交换行和列。

使用as.data.frame.matrix(table(df))得到一个data.frame作为输出。(as.data.frame将创建一个长的data.frame,而不是一个你想要的相同输出格式)。


查看完整回答
反对 回复 2019-07-31
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

使用f@Ananda你可以使用dcast


library(reshape2)


> dcast(f, V1~V2)

Using V2 as value column: use value.var to override.

Aggregation function missing: defaulting to length

  V1  g  h  i

1 a   2  1  0

2 b   1  1  1

3 c   0  0  1

但是,我写这篇文章只是为了以后你可能需要的不仅仅是table(在这种情况下,这是最简单的正确答案),例如:


set.seed(1)

f$var <- rnorm(7)


> f

  V1 V2        var

1 a   g -0.6264538

2 a   h  0.1836433

3 a   g -0.8356286

4 b   i  1.5952808

5 b   g  0.3295078

6 b   h -0.8204684

7 c   i  0.4874291


> dcast(f, V1~V2, value.var="var", fun.aggregate=sum)

  V1          g          h         i

1 a  -1.4620824  0.1836433 0.0000000

2 b   0.3295078 -0.8204684 1.5952808

3 c   0.0000000  0.0000000 0.4874291


查看完整回答
反对 回复 2019-07-31
  • 2 回答
  • 0 关注
  • 1806 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信