Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按年度获取总数_R - Fatal编程技术网

R 按年度获取总数

R 按年度获取总数,r,R,我有以下几点意见 Fund Name Assets_Jan2000 Asset_Feb2000 Asets_Mar2000 x Y 20234 654654 13154 A T 45646 46546544 K L 464654 464 还有更多的专栏——一直到2017年12月 我希望得到每月(如2

我有以下几点意见

Fund   Name   Assets_Jan2000 Asset_Feb2000 Asets_Mar2000
 x      Y          20234        654654         13154
 A      T          45646        46546544       
 K      L          464654                      464
还有更多的专栏——一直到2017年12月

我希望得到每月(如2000年1月)以及每年(如2000年、2001年等)的总数

我尝试了以下方法

total <- colSums(assets[, c(3:365)], na.rm = TRUE)
total1 <- as.data.frame(total). 

total要按年份获取总计,一种方法是按列名拆分数据,提取年份,然后取所有值的
sum
。在base R中,我们可以使用
split.default
sapply

df1 <- df[,c(3:365)]
sapply(split.default(df1, sub(".*?(\\d+$)", "\\1", names(df1))), function(x) 
       sum(unlist(x), na.rm = TRUE))

我们可以在
tidyverse
中使用

library(tidyverse)
gather(df1, Year, Val, matches("^As+et"), na.rm = TRUE) %>% 
   group_by(Year = readr::parse_number(Year)) %>%
   summarise(Val = sum(Val))

或使用
base R

aggregate(values ~ cbind(Year = sub("\\D+", "", ind)), 
             stack(df1[-(1:2)]), FUN = sum, na.rm = TRUE)
或者使用OP帖子中的
colSums
结果的
aggregate

aggregate(values ~ cbind(Year = sub("\\D+", "", ind)), 
       stack(colSums(df1[-(1:2)], na.rm = TRUE)), FUN = sum)
数据
df1
aggregate(values ~ cbind(Year = sub("\\D+", "", ind)), 
       stack(colSums(df1[-(1:2)], na.rm = TRUE)), FUN = sum)
df1 <- structure(list(und = c("x", "A", "K"), Name = c("Y", "T", "L"
), Assets_Jan2000 = c(20234L, 45646L, 464654L), Asset_Feb2000 = c(654654L, 
46546544L, NA), Asets_Mar2000 = c(13154L, NA, 464L)),
class = "data.frame", row.names = c(NA, 
-3L))