如何解决我需要将行索引之间的tidyverse数据框中的列中的值相加
我有一个tidyverse数据框,我想将这些行的连续子集之间的列中的值相加。我想通过其名称而不是列号来标识该列。
例如对于“伏特”列,将100到199行之间的所有值相加。(然后,使用循环,我将在200到299之间相加,等等)
我正在努力寻找对SO和Google有用的任何东西,因此,任何建议都将不胜感激。
解决方法
如果您的列在名为if __name__ == "__main__"
的数据框内称为volts
:
df
我还假设您只需要用这种方式汇总一列,如果您想添加一列,则可以使用嵌套的step = 99
intervals = seq(1,nrow(df),steps)
sumVector = lapply(intervals,function(x){
df$volts[x:(x-step)] %>% sum
})%>% unlist
调用来完成。
使用dplyr和group_by:
library(dplyr)
data(storms)
df <- storms
df <- df %>% mutate(id=floor(1:n()/100)) %>% group_by(id) %>%
mutate(volts_sum=sum(wind)) %>% ungroup() %>% select(-id)
用数据的列名代替风。
,其他答案无疑具有很多优势,但是在我进入R的初期阶段,我更喜欢一种更直观的方法。我设法使它正常工作,并且对我来说更容易理解(并且可以很容易地循环更新r1和r2):
jt = tibble( x=c(5,6,7,8,9),y=c(9,2))
r1 = 2
r2 = 4
mycolname = 'y' # parameterise the column name too
subset_col_mean = colMeans( jt[r1:r2,mycolname]) #includes BOTH row's values
print(subset_col_mean)
或者,map*()
组函数提供了更简洁但仍然非常清晰的选项:
map_dbl( jt[r1:r2,mycolname],mean) # can use median,max,min,sum,.. instead of mean
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。