2017-09-13 41 views
0

我一直在努力做两个数据帧之间的条件和。我尝试重新创建数据(在我真实的工作问题中重新创建它的确切形式),所以我现在必须在Excel中的不同工作表之间运行一些可能非常简单的sumif。我是R的新手,所以任何帮助将不胜感激!SUMIFS等价于来自不同数据帧的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 <- 
+1

只是做'库(dplyr); X1%>%GROUP_BY( ClientID)%>%summarise_all(sum)'或'aggregate(。〜ClientID,df1,sum)' – akrun

回答

2

你可以这样来做:

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) 
+0

非常感谢!如果x1数据帧与x1数据帧具有不同数量的列(以及不同的列名称),解决方案是否会有显着差异? – dmel2017

+0

在第一种情况下,它汇总了每个客户端来自'x1'的所有列,在第二种情况下,您在第一行选择客户端并在第三行选择需要的列 –

相关问题