【问题标题】:SUMIFS equivalent in R from different data frames [duplicate]来自不同数据帧的 R 中等效的 SUMIFS [重复]
【发布时间】:2017-09-13 19:15:02
【问题描述】:

我一直在努力在两个数据帧之间进行条件求和。我试图重新创建数据(以我在实际工作问题中重新创建它的确切形式),所以我现在必须在 Excel 中的不同工作表之间运行一个非常简单的 sumif。我是 R 的新手,所以任何帮助将不胜感激!

x1 <- data.frame("ClientID" = c("75","85","95", "75","85","95", "75","85","95"), "Jan2014" = c(80.25, 96.47, 94.44, 85.29, 97.66, 82.33, 35.44, 55.56, 88.88), "Feb2014" = c(90.25, 46.44, 54.54, 86.29, 87.66, 52.33, 55.44, 44.56, 78.87))
column.names <- c("ClientID", "Jan2014", "Feb2014")        
ClientID <- x1$ClientID
ClientID <- unique(ClientID)
rows.no <- length(ClientID)
column.no <- length(column.names)
x2 <-   data.frame(matrix(nrow=rows.no, ncol = column.no))
colnames(x2) <- column.names
x2$ClientID <- ClientID

#I want to have the totals for each of the Jan2014 and Feb2014 columsn at the x2 data table, based on the x1 table (sumifs equivalent)

x2$Jan2014 <- 
x2$Feb2014 <- 

【问题讨论】:

  • 只要library(dplyr);x1 %&gt;% group_by(ClientID) %&gt;% summarise_all(sum) 或aggregate(.~ClientID, df1, sum)

标签: r sum conditional


【解决方案1】:

你可以这样做:

library(dplyr)
x1 %>% group_by(ClientID) %>% summarize_all(sum)

# # A tibble: 3 x 3
#   ClientID Jan2014 Feb2014
# <fctr>   <dbl>   <dbl>
# 1       75  200.98  231.98
# 2       85  249.69  178.66
# 3       95  265.65  185.74

或更一般地说(但这里的结果相同)

x1 %>% filter(ClientID %in% c(75,85,95)) %>%
  group_by(ClientID) %>%
  select(Jan2014,Feb2014) %>%
  summarize_all(sum)

【讨论】:

  • 非常感谢!如果 x1 数据帧与 x1 数据帧具有不同的列数(和不同的列名),解决方案是否会有显着差异?
  • 在第一种情况下,它为每个客户汇总来自x1 的所有列,在第二种情况下,您在第一行选择客户并在第三行选择您需要的列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多