新手在这里,我在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
但有行吗?
非常感谢!
答案 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
中所述