2016-05-25 7 views
1

Neuling zusammenfassen, ich habe diesen Datenrahmen in r:Wie kann ich zwei Reihen in eine neue in einem Datenrahmen hier

DF<- data.frame(
2014 = c(30,20,4), 
2015 = c(25,40,6), 
row.names = c("mobile login", "computer login","errors")) 

wie es zeigt:

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

Ich möchte hinzufügen neue Reihe, in der ich die insgesamt Anmeldungen haben, so etwas wie:

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

Soweit ich weiß, ich kann mit Spalten arbeiten, so dass sie mit ‚$‘ accesing. Gibt es eine Möglichkeit, etwas zu tun wie

DF$total <- DF$mobile + DF$computer 

aber mit Zeilen?

Vielen Dank!

+0

Wenn Fehler Ihre letzte Zeile ist, dann 'colSums (DF [ -nrow (DF),]) 'sollte es tun – Sotos

+0

' DF [1,] + DF [2,] '. Beachten Sie das Komma in den eckigen Klammern. Im Allgemeinen können Sie mit "[row, column]" eine bestimmte Zelle definieren, wenn ein einzelner Wert für beide oder einen Bereich von Zellen bereitgestellt wird. Wenn einer der Werte fehlt, wählen Sie die gesamte erste und zweite Zeile aus. – nya

+0

@Sotos Nein, ist es nicht. Spalten gehen von 2012 bis 2015 und ich habe 10 Spalten, zwei von ihnen müssen addiert werden und zwei von ihnen subtrahiert werden, endend mit 8. Ich fügte das als ein kleines aber repräsentatives Beispiel –

Antwort

0

Ja, da ist, werfen Sie einen Blick auf die -Funktion.
Wie df[ row, column].

Kann ich sagen, dass es besser wäre, es als echte Variable einzuschließen, anstatt nur als Zeilennamen? Das macht es leichter zu haben „ordentlich Daten“, wie in this paper

1

hier beschrieben ist eine Möglichkeit,

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

Es ist besser, die Daten aufzuräumen, so dass es einfacher ist, Aggregatfunktionen zu verwenden. Zum Beispiel, wenn wir von weitem zu lange unter Ihrem Beispiel Datentransformation:

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 

Dann ist es bequemes zusammenfassen:

# 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 
Verwandte Themen