1

我有一个数据框->“测试”

> test
     V1 V2
1 INS01  1
2 INS01  1
3 INS02  1
4 INS03  2
5 INS03  3
6 INS04  4
> class(test)
[1] "data.frame"

我想要计数“INS01”、“INS02”、“INS03”、“INS04”。我尝试使用“by”,但它没有给我想要的输出。

> agg <- by(test, test$V1, function(x) length(x))
> agg
test$V1: INS01
[1] 2
------------------------------------------------------------ 
test$V1: INS02
[1] 2
------------------------------------------------------------ 
test$V1: INS03
[1] 2
------------------------------------------------------------ 
test$V1: INS04
[1] 2

我被困在这里。任何帮助表示赞赏。谢谢

4

3 回答 3

2

利用table()

让我们制作测试数据框(请在下一个问题中提供类似的代码,请参见此处

zz <- textConnection("
V1 V2
1 INS01  1
2 INS01  1
3 INS02  1
4 INS03  2
5 INS03  3
6 INS04  4
")
Data <- read.table(zz)

接着:

> table(Data$V1)

INS01 INS02 INS03 INS04 
    2     1     2     1 
于 2014-01-02T10:06:37.363 回答
1

将列 V1 转换为 afactor并使用返回频率的默认factor summary方法。

> summary(as.factor(test$V1))
INS01 INS02 INS03 INS04
    2     1     2     1
于 2014-01-02T10:15:51.713 回答
1

Joris 分享了我这样做的方式,但我想我会分享为什么你的答案是错误的:

使用lengthon adata.frame告诉您 a 中有多少列data.frame,而不是结果行数(这就是您实际想要的)。

例子:

x <- data.frame(matrix(1:100, ncol = 25))
length(x)
# [1] 25

如果要使用by,请nrow改用:

by(test, test$V1, function(x) nrow(x))
# test$V1: INS01
# [1] 2
# --------------------------------------------------------------------------- 
# test$V1: INS02
# [1] 1
# --------------------------------------------------------------------------- 
# test$V1: INS03
# [1] 2
# --------------------------------------------------------------------------- 
# test$V1: INS04
# [1] 1
于 2014-01-02T10:24:50.790 回答