2017-09-13 50 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'的所有列,在第二種情況下,您在第一行選擇客戶端並在第三行選擇需要的列 –

相關問題