如何在数据框中将两行汇总为一个新行

时间:2016-05-25 10:12:19

标签: r dataframe

新手在这里,我在r:

中有这个数据框
DF<- data.frame(
2014 = c(30,20,4), 
2015 = c(25,40,6), 
row.names = c("mobile login", "computer login","errors"))

如图所示:

              2014  2015
mobile login   30    25
computer login 20    40
errors         4     6

我想添加一个新行,其中我总共有登录,例如:

             2014  2015
mobile login   30    25
computer login 20    40
errors         4     6
total login    50    65

据我所知,我可以使用列进行操作,并使用&#39; $&#39;进行访问。有没有办法做类似

的事情
DF$total <- DF$mobile + DF$computer

但有行吗?

非常感谢!

3 个答案:

答案 0 :(得分:1)

这是一种方式,

DF <- rbind(DF, colSums(DF[rownames(DF) != 'errors',]))
rownames(DF)[nrow(DF)] <- 'total login'
#               X2014 X2015
#mobile login      30    25
#computer login    20    40
#errors             4     6
#total login       50    65

答案 1 :(得分:1)

最好整理数据,以便更容易使用聚合函数。例如,如果我们将您的示例数据从wide转换为long,如下所示:

library(dplyr)
library(tidyr)

# tidy up
df_clean <- 
  DF %>% 
  add_rownames("Item") %>% 
  mutate(Type = ifelse(grepl("login", Item), "Login", "Other")) %>% 
  gather(Year, Count, -c(1, 4))

df_clean
#             Item  Type  Year Count
#            (chr) (chr) (chr) (dbl)
# 1   mobile login Login  2014    30
# 2 computer login Login  2014    20
# 3         errors Other  2014     4
# 4   mobile login Login  2015    25
# 5 computer login Login  2015    40
# 6         errors Other  2015     6

然后总结一下会更方便:

# summary example
df_clean %>% 
  filter(Type == "Login") %>% 
  group_by(Type, Year) %>% 
  summarise(TotalLogin = sum(Count))

#    Type  Year TotalLogin
#   (chr) (chr)      (dbl)
# 1 Login  2014         50
# 2 Login  2015         65

答案 2 :(得分:0)

是的,看看[ - 函数 与df[ row, column]一样。

我可以说最好将它包含为实数变量,而不仅仅是行名吗?这使得更容易拥有整洁的数据&#34;如this paper

中所述