2016-10-17 5 views
0

Ich habe diesen Datenrahmen und ich würde gerne für jede Zeile den % berechnen (zum Beispiel). Ich möchte diesen Datenrahmen im selben Datenrahmen transformieren, aber nur für %.Wie berechnet man% für Zeilen/Spalten (in einem Datenrahmen)

enter image description here

Genau wie dieses Bild:

enter image description here

Wie kann ich es tun?

Daten:

dat <- data.frame(
    county = c("FRANCIA", "GRECIA", "ITALIA"), 
    `310` = c(73, 165, 347), 
    `320` = c(13, 80, 118), 
    `330` = c(10, 57, 94), 
    `340` = c(28, 116, 177), 
    check.names = FALSE 
) 
+0

Sie können diesen Beitrag überprüfen wollen: http://stackoverflow.com/questions/23568142/row-and-column-sums-in-r – JJFord3

+0

'df/rowSums (df) * 100' – 989

Antwort

0

Wenn Sie das % Zeichen enthalten speziell wollen, versuchen Sie adorn_crosstab() vom Pförtner Paket:

library(janitor) 
dat %>% 
    adorn_crosstab(show_n = FALSE, digits = 0) 

    county 310 320 330 340 
1 FRANCIA 59% 10% 8% 23% 
2 GRECIA 39% 19% 14% 28% 
3 ITALIA 47% 16% 13% 24% 

Wenn Sie die Proportionen als numeric -Klasse beibehalten möchten, siehe Calculate row-wise proportions.

(Disclaimer: Ich bin der Autor dieser Funktion - aber ich denke, es ist der schnellste Weg ist, um das gewünschte Ergebnis zu erhalten)

+0

Danke an alle für die Hilfe! :) – Marcusson

0

Basispaket, prop.table verwenden. Zuerst konvertieren wir den Datenrahmen in eine Matrix. Dann zurück zu einem Datenrahmen, der die Spalte Land unter Verwendung von cbind wiederherstellt.

cbind(Country = dat[, 1], as.data.frame(prop.table(as.matrix(dat[, 2:5]), 1))) 

Ausgang:

Country  310  320  330  340 
1 FRANCIA 0.5887097 0.1048387 0.08064516 0.2258065 
2 GRECIA 0.3947368 0.1913876 0.13636364 0.2775120 
3 ITALIA 0.4714674 0.1603261 0.12771739 0.2404891 
+0

Hallo @Marcusson, wenn diese oder jede Antwort Ihre Frage gelöst hat, beachten Sie bitte [akzeptieren] (http://meta.stackexchange.com/q/5234/179419), indem Sie auf das Häkchen klicken. Dies zeigt der breiteren Gemeinschaft, dass Sie eine Lösung gefunden haben und sowohl dem Antworter als auch Ihnen einen guten Ruf verschaffen. Es besteht keine Verpflichtung, dies zu tun. – mpalanco

Verwandte Themen