首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R表函数中的列组合

R表函数中的列组合
EN

Stack Overflow用户
提问于 2016-05-29 08:52:27
回答 3查看 132关注 0票数 1

我目前正在学习R,我遇到了制表数据的问题。

我在一个数据框架model中有整数分数,范围从1到10 (包括在内)。当我使用表函数时,即

代码语言:javascript
复制
table(model$score)

我得到以下结果:

代码语言:javascript
复制
  1  2  3  4  5  6  7  8  9 10
  5  6  8  7  2  3  6  4  5  0

但是,我想以以下格式列出数据:

代码语言:javascript
复制
  1-2  3-4  5-6  7-8  9-10
   11   15    5   10     5

是否可以通过表函数来实现这一点,或者我是否需要寻求另一个函数/包的帮助?那我怎么做呢?对于prop.table函数有类似的方法吗?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-29 09:02:07

为什么不干脆这么做呢?

代码语言:javascript
复制
x <- table(model$score)
x <- x[c(1,3,5,7,9)] + x[c(2,4,6,8,10)]
names(x) <- c("1-2","3-4","5-6","7-8","9-10")

它根本没有带来额外的复杂性。

table当然会给你一个长度- 10的向量,因为你有10个唯一的水平。

如果您坚持调用table()以获得所需的结果,则需要使用cut()将数据分类为回收箱:

代码语言:javascript
复制
set.seed(0); a <- sample(1:10, 200, replace = TRUE)
table(cut(a, breaks = c(0,2,4,6,8,10)))

 (0,2]  (2,4]  (4,6]  (6,8] (8,10] 
    29     45     43     47     36 

换个标签?使用labels (在cut()内部):

代码语言:javascript
复制
table(cut(a, breaks = c(0,2,4,6,8,10), labels = c("1-2","3-4","5-6","7-8","9-10")))

 1-2  3-4  5-6  7-8 9-10 
  29   45   43   47   36 

但是你必须确保a是数字的。如果:

代码语言:javascript
复制
a <- factor(a)
table(cut(a, breaks = c(0,2,4,6,8,10)))

Error in cut.default(a, breaks = c(0, 2, 4, 6, 8, 10)) : 
  'x' must be numeric
票数 6
EN

Stack Overflow用户

发布于 2016-05-29 09:25:36

您也可以使用zoo包,

代码语言:javascript
复制
library(zoo)
rollapply(table(model$score), 2, by = 2, sum)

使用李哲元的例子,(更新为@G.Grotandieck的评论)

代码语言:javascript
复制
tt <- rollapply(table(a), 2, by = 2, sum)
names(tt) <- rollapply(names(table(a)), 2, by = 2, paste, collapse = "-")
tt
# 1-2  3-4  5-6  7-8 9-10 
#  29   45   43   47   36 
票数 4
EN

Stack Overflow用户

发布于 2016-05-29 11:28:21

下面是使用RcppRolltabulate的更快的选项

代码语言:javascript
复制
library(RcppRoll)
nm1 <- do.call(paste, c(as.data.frame(matrix(1:10, ncol=2, byrow=TRUE)), list(sep="-")))
setNames(roll_sum(tabulate(a),2)[c(TRUE, FALSE)], nm1)
# 1-2  3-4  5-6  7-8 9-10 
#  29   45   43   47   36 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37507959

复制
相关文章

相似问题

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