2017-05-04 4 views
0

Merging habe ich eine df wie folgt aus:mehrere Spalten mit ähnlichen Namen in einem Datenrahmen

id mon.1 tue.1 wed.1 mon.2 tue.2 wed.2 mon.3 tue.3 wed.3 
HD82 1  0  1  1  0  1  1  0  0 
HD83 0  0  0  1  1  0  1  0  1 
HD84 1  1  0  1  1  0  0  1  0 

jeder mon/tue/wed Spalte eine Anzahl von Vorkommen enthält, die über mehrere Wochen gemessen wurden, aber ich möchte kombinieren die Spalten, um eine Summe für jeden Tag zu haben, und einen Datenrahmen, der wie folgt aussieht:

id mon tue wed 

zB Ich möchte einen Datenrahmen bilden, in dem die Spalten Montag sein würden = Mon.1 + Mon.2 + Mon.3, Dienstag = Di.1 + Di.2 + Di.3 usw.

Irgendwelche Ideen, wie ich tun würde Dies?

Danke.

+1

Könnten Sie ein reproduzierbares Beispiel nennen? Zum Beispiel mit dput? Ich bin mir nicht sicher, ob ich Ihre Anfrage verstehe. Sie möchten einen Datenrahmen mit Tag = Tag.1 + Tag.2 + Tag.3 erstellen? – Arault

+1

Bitte stellen Sie einige Dummy-Daten zur Verfügung, mit denen Sie arbeiten und zeigen Sie, was Sie bisher versucht haben (zum Beispiel durch 'dput' ein bisschen von Ihrem' df' –

+0

sind Ihre Spaltennamen immer als day.number strukturiert dh Sie können extrahieren Sie das Bit vor dem '.', um den Tag Teil zu haben? –

Antwort

0

Ein Weg ist, das Teil vor der . zu extrahieren. Dies kann mit der folgenden Funktion geschehen:

day_extract<-function(x) 
{ 
    x<-as.character(x) 
    strsplit(x, ".", fixed = T)[[1]][1] 
} 

Versuchen Sie, diese Funktion auf Ihren Datenrahmen anzuwenden.

0

Ihre df ist derzeit in wide Format, wobei jede Zelle (abgesehen von der id Spalte) eine Messung darstellt. Sie können tidyr verwenden, um es long Format zu transformieren jede Zeile in dem Datenrahmen -wo eine Messung darstellt, und dann leicht Aggregat über Tage:

library(tidyr) 
library(dplyr) 
#some dummydata 
df <- data.frame(a.1=c(1:10), 
       a.2 = c(1:10), 
       b.foo = c(1:10), 
       stringsAsFactors = FALSE) 
#transform to long format 
dfLong <- gather(df,"dayWeek","value") %>% 
#extract day name 
     mutate(day = gsub("\\..*","",dayWeek)) %>% 
#summarise 
     group_by(day) %>% 
     summarise(dayTotal = sum(value)) 
Verwandte Themen