首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于数据帧中另一列的条件的和列

基于数据帧中另一列的条件的和列
EN

Stack Overflow用户
提问于 2019-03-28 10:29:29
回答 2查看 260关注 0票数 1

我有一个数据框架,它包含两个列,TimeResponse

代码语言:javascript
复制
df = cbind.data.frame(
                     Time = c(1, 1.2, 1.9, 2.2, 2.9, 3.1, 3.2, 3.2, 3.2, 3.6, 3.9, 4, 5.1, 5.99), 
                     Response = c(1, 1, 1, 2, 3, 3, 3, 4, 3.5, 3.6, 3.3, 6, 11, 13)
                     )

我想通过在同一分钟(时间)内将响应求和来转换它。[1-2]、[2-3)、[3-4]、[4-5]和5及以上。

预期的数据框架将是

代码语言:javascript
复制
dfe = cbind.data.frame(
                      time.range = c(1, 2, 3, 4, 5), 
                      Response = c(3, 5, 19.4, 6, 24)
                      )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-28 10:32:10

我们可以使用floor对其进行每分钟的分组。

代码语言:javascript
复制
library(dplyr)

df %>%
  group_by(minute = floor(Time)) %>%
  summarise(Response = sum(Response))

#   minute Response
#    <dbl>    <dbl>
#1      1      3  
#2      2      5  
#3      3     20.4
#4      4      6  
#5      5     24  

在R基中使用aggregate

代码语言:javascript
复制
aggregate(Response~floor(Time), df, sum)

也可以使用tapply

代码语言:javascript
复制
tapply(df$Response, floor(df$Time), sum)

以及完成data.table选项

代码语言:javascript
复制
library(data.table)
setDT(df)[,sum(Response), by = floor(Time)]
票数 6
EN

Stack Overflow用户

发布于 2019-03-28 17:02:03

我们可以使用来自rowsumbase R

代码语言:javascript
复制
rowsum(df$Response, as.integer(df$Time))
#   [,1]
#1  3.0
#2  5.0
#3 20.4
#4  6.0
#5 24.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55395339

复制
相关文章

相似问题

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