首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >频率统计

频率统计
EN

Stack Overflow用户
提问于 2012-10-24 03:07:41
回答 3查看 301关注 0票数 1

我的情况是这样的:

df

代码语言:javascript
复制
List      Count 
R472        1   
R472        1   
R472        2 
R472        2       
R845        1   
R845        2   
R845        2
....       ...

我想要以下输出:

df

代码语言:javascript
复制
List           freq_of_number1   freq_of_number2 
R472                  2                 2   
R845                  1                 2
....

有什么想法吗?唐克斯。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-24 03:17:32

这是aggregate的工作

代码语言:javascript
复制
d <- read.table(text="List      Count 
R472        1   
R472        1   
R472        2 
R472        2       
R845        1   
R845        2   
R845        2", header=TRUE)

aggregate(Count ~ List, data=d, FUN=table)

#   List Count.1 Count.2
# 1 R472       2       2
# 2 R845       1       2

编辑:

上面的代码适用于您提供的情况,既然您已经接受了答案,我假设它也适用于较大的情况,但是如果List中的任何条目缺少Count中的一个数字,那么这个简单的答案就会失败。对于更一般的情况:

代码语言:javascript
复制
DF <- read.table(text="List      Count 
R472        1   
R472        1   
R472        2 
R472        2       
R845        1   
R845        2   
R845        2
R999        2", header=TRUE)

f <- function(x) {
    absent <- setdiff(unique(DF$Count), x)
    ab.count <- NULL
    if (length(absent) > 0) {
        ab.count <- rep(0, length(absent))
        names(ab.count) <- absent
    } 
    result <- c(table(x), ab.count)
    result[order(names(result))]
}
aggregate(Count ~ List, data=d, FUN=f)

#   List Count.1 Count.2
# 1 R472       2       2
# 2 R845       1       2
# 3 R999       0       1

编辑2:

刚刚看到@JasonMorgan的答案。去接受那个吧。

票数 4
EN

Stack Overflow用户

发布于 2012-10-24 03:28:07

table函数不起作用吗?

代码语言:javascript
复制
> with(DF, table(List, Count))
      Count
List   1 2
  R472 2 2
  R845 1 2

更新:根据布兰登的评论,如果你不喜欢使用with,这也是可行的

代码语言:javascript
复制
> table(DF$List, DF$Count)
票数 3
EN

Stack Overflow用户

发布于 2012-10-24 03:18:07

我认为有一种更有效的方法,但这里有一个想法

代码语言:javascript
复制
DF <- read.table(text='List      Count 
R472        1   
R472        1   
R472        2 
R472        2       
R845        1   
R845        2   
R845        2', header=TRUE)



Freq <- lapply(split(DF, DF$Count), function(x) aggregate(.~ List, data=x, table ))
counts <- do.call(cbind, Freq)[, -3]
colnames(counts) <- c('List', 'freq_of_number1', 'freq_of_number2')
counts
List freq_of_number1 freq_of_number2
1 R472               2               2
2 R845               1               2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13037449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档