在R表函数中组合列

在R表函数中组合列,r,dataframe,R,Dataframe,我目前正在学习R,我遇到了制表数据的问题 我在一个数据框模型中有整数分,范围从1到10,包括1到10。当我使用表格功能时,即 table(model$score) 我得到以下结果: 1 2 3 4 5 6 7 8 9 10 5 6 8 7 2 3 6 4 5 0 但是,我想用以下格式将数据制成表格: 1-2 3-4 5-6 7-8 9-10 11 15 5 10 5 是否可以通过table函数实现这一点,或者

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

我在一个数据框模型中有整数分,范围从1到10,包括1到10。当我使用表格功能时,即

table(model$score)
我得到以下结果:

  1  2  3  4  5  6  7  8  9 10
  5  6  8  7  2  3  6  4  5  0
但是,我想用以下格式将数据制成表格:

  1-2  3-4  5-6  7-8  9-10
   11   15    5   10     5
是否可以通过table函数实现这一点,或者我必须寻求其他函数/包的帮助?那我怎么做呢?prop.table函数有类似的方法吗


谢谢你的帮助。

为什么不干脆这么做呢

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")
更改标签?在剪切内使用标签:

但你必须确保a是数字。如果出现以下情况,则会出现错误:

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

为什么不干脆这样做呢

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")
更改标签?在剪切内使用标签:

但你必须确保a是数字。如果出现以下情况,则会出现错误:

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
你也可以用动物园套餐

使用@Zheyuan Li的例子,根据@G.Grothendieck的评论更新

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 
你也可以用动物园套餐

使用@Zheyuan Li的例子,根据@G.Grothendieck的评论更新

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 

这里有一个使用RcppRoll和tablate的更快选项


这里有一个使用RcppRoll和tablate的更快选项


谢谢你详细的回答。我想我会坚持你做事情的第一种方法,因为它很简单,但现在对我来说已经足够好了。我也不知道切割函数。谢谢你详细的回答。我想我会坚持你做事情的第一种方法,因为它很简单,但现在对我来说已经足够好了。我也不知道cut函数。或者再次使用rollpapply来设置名称:namestt Nice one@G.grothendieck您的解决方案看起来也很简单。如果我错了,请纠正我,但是rollapply函数是否像滑动窗口一样工作?据我所知,rollapply按by参数中指定的数字移动滑动窗口,然后执行指定的函数。@MohideenImranKhan,没错。试着通过改变参数来处理它,你会看到它是如何工作的。这很容易,或者可以再次使用rollapply来设置名称:namestt Nice one@G.grothendieck您的解决方案看起来也很简单。如果我错了,请纠正我,但是rollapply函数是否像滑动窗口一样工作?据我所知,rollapply按by参数中指定的数字移动滑动窗口,然后执行指定的函数。@MohideenImranKhan,没错。试着通过改变参数来处理它,你会看到它是如何工作的。这很容易
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