Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
magewie
Beiträge: 7
Registriert: Di Mär 16, 2021 6:36 pm

Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von magewie »

Hallo R-Community!

An folgendem Problem habe ich mir nun schon einige Stunden den Kopf zerbrochen:

Code: Alles auswählen

          Gebiet                     Sachmerkmal  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019
1          Mitte Gebäude mit Wohnungen insgesamt  2592  2588  2578  2558  2548  2541  2549  2548  2545  2555  2562  2846  2875  2893  2930  2985  3053  3154  3206  3331
2        Nordost Gebäude mit Wohnungen insgesamt  5609  5648  5675  5697  5718  5740  5729  5725  5733  5748  5766  5811  5822  5852  5871  5917  5983  6037  6104  6170
3            Ost Gebäude mit Wohnungen insgesamt  7471  7656  7726  7833  7937  7985  8067  8142  8203  8267  8320  9083  9149  9246  9350  9477  9613  9731  9839  9980
4         Südost Gebäude mit Wohnungen insgesamt  6594  6674  6749  6814  6865  6903  6894  6948  7012  7059  7098  7608  7680  7756  7831  7911  8027  8178  8252  8413
5            Süd Gebäude mit Wohnungen insgesamt  5003  5021  5023  5012  5037  5055  5039  5055  5063  5073  5101  5256  5288  5312  5370  5408  5443  5484  5527  5582
6        Südwest Gebäude mit Wohnungen insgesamt  5348  5404  5418  5449  5493  5553  5593  5623  5667  5708  5737  6155  6182  6256  6319  6400  6459  6539  6631  6715
7           West Gebäude mit Wohnungen insgesamt  3532  3565  2855  3608  3659  3681  3718  3695  3708  3705  3726  4122  4111  4137  4187  4251  4325  4370  4419  4445
8       Alt-West Gebäude mit Wohnungen insgesamt  5343  5385  5421  5458  5548  5605  5677  5727  5760  5778  5815  6434  6479  6550  6621  6705  6807  6887  6976  7084
9       Nordwest Gebäude mit Wohnungen insgesamt  3947  4052  4078  4095  4142  4163  4185  4213  4234  4269  4284  4907  4928  4973  5011  5056  5141  5216  5277  5361
10          Nord Gebäude mit Wohnungen insgesamt  6046  6317  6384  6587  6663  6733  6795  6839  6882  6918  6949  7551  7583  7693  7773  7930  8040  8135  8231  8365
11 Stadt Leipzig Gebäude mit Wohnungen insgesamt 52112 52943 53481 53976 54637 55008 55312 55590 55948 56232 56519 59778 60108 60709 61423 62236 63121 64012 64760 65748
Ich möchte lediglich die Werte aller Jahre für die "Gebiete" der Zeilen 2 bis 10 (2:10) addieren und in einer neuen Zeile mit dem neuen Wert "Rest" vereinen.

Ich würde mich sehr über einige Tips und Hilfestellungen freuen! (auch ganz generell dazu, wie ich bei eigentlich ja so einfach erscheinenden Rechenoperationen schneller in meinem Lernprozess vorankommen kann...)

Einen angenehmen Freitag,
magewie
Bis dahin und
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von bigben »

Hallo magewie,

wenn ich Dich richtig verstehe, möchtest Du ganze Spalten aufaddieren. Dafür gibt es in R das Kommando colSums.
Ansonsten hast Du das im letzten Thread schon richtig gemacht, dass Du die Daten in einer für R lesbaren Form eingestellt hast. Alternativen dazu findest Du hier: viewtopic.php?f=20&t=11

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
magewie
Beiträge: 7
Registriert: Di Mär 16, 2021 6:36 pm

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von magewie »

Hallo Bernhard,

ich möchte nur eine Auswahl der Zeilen aufaddieren. Nehmen wir bei obiger Tabelle an, dass ich für die Jahre 2000 bis 2019 die Gebiete "Mitte und Nord" zusammenlegen (Summe der Gebäudezahlen für beide Gebiete und alle Jahre) möchte. Die neu entstandene Zeile sollte den Namen "Mitte_Nord" bekommen. Dass hier mehrere Datentypen (character und numeric) weiss ich, doch vielleicht ließe sich das ja dennoch bewerkstelligen?

Mit dem Operator colSums() bin ich nicht voran gekommen. Anscheinend kommen mir da die ersten zwei Spalten im character type in die Quere...

Hast du eine andere Idee? Oder muss ich hier mit transponieren und mutieren arbeiten?
Hier mein bisheriger Code, um auf obige Tabelle zu kommen:

Code: Alles auswählen

komstat_baubestand <- read.csv("Bautätigkeit und Wohnen_Gebäudebestand.csv",
                               header = TRUE, dec = ",", check.names = FALSE,
                               encoding = "UTF-8")
komstat_baubestand <- komstat_baubestand[c(64:74),]
rownames(komstat_baubestand) <- NULL
Liebe Grüße,
magewie
Dateianhänge
Bautätigkeit und Wohnen_Gebäudebestand.csv
(68.28 KiB) 56-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von EDi »

Ich würde die Daten ins lange Format bringen und dann aggregieren...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
magewie
Beiträge: 7
Registriert: Di Mär 16, 2021 6:36 pm

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von magewie »

EDi hat geschrieben: Fr Mär 19, 2021 5:07 pm Ich würde die Daten ins lange Format bringen und dann aggregieren...
Da dir keine Möglichkeit ohne transponieren bekannt ist? Oder gibt es eine ohne die Daten in's lange Format zu bringen, die jedoch sehr kompliziert ist?
Ich würde mir gern ein Bild von allen möglichen Optionen machen können.

Hier mal, was ich jetzt mit pivot_longer() und dem Umbenennen derjenigen Stadtgebiete, welche zusammengefasst werden sollen, erreicht habe. Das finale Addieren der Werte in "Anzahl Genehmigungen" klappt aber noch nicht, wisst ihr weshalb?

Code: Alles auswählen

komstat_baugenehm <- read.csv("Bautätigkeit und Wohnen_Baugenehmigungen.csv",
                              header = TRUE, dec = ",", check.names = FALSE,
                              encoding = "UTF-8")
komstat_baugenehm <- komstat_baugenehm[c(64:74, 138:148, 212:222),]
rownames(komstat_baugenehm) <- NULL

komstat_baugenehm_long <- komstat_baugenehm %>% 
  pivot_longer(c(3:20), names_to = "Jahr", values_to = "Anzahl Genehmigungen")
    

komstat_baugenehm_long[c(19:180, 217:378, 415:576),1] = "Peripherie"
komstat_baugenehm_long %>%
  group_by(Gebiet, Sachmerkmal, Jahr) %>%
  summarize(Anzahl Genehmigungen = sum(`Anzahl Genehmigungen`))
Danke,
magewie
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von bigben »

magewie hat geschrieben: Fr Mär 19, 2021 3:34 pm Anscheinend kommen mir da die ersten zwei Spalten im character type in die Quere...
Ja klar, aber wenn Du nur die Spaltensummen der Zeilen 1 bis 10 und der Spalten 3 bis 22 errechnen willst, dann ist das kein Problem:

Code: Alles auswählen

colSums(komstat_baubestand[1:10, 3:22])
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zeilen eines Datensatzes zu neuer Zeile aufaddieren

Beitrag von bigben »

magewie hat geschrieben: Fr Mär 19, 2021 5:59 pmHier mal, was ich jetzt mit pivot_longer() und dem Umbenennen derjenigen Stadtgebiete, welche zusammengefasst werden sollen, erreicht habe. Das finale Addieren der Werte in "Anzahl Genehmigungen" klappt aber noch nicht, wisst ihr weshalb?
Ich würde mir ja die Fehlermeldung anschauen, aber das ist schon wieder kein reproduzierbares Beispiel. Denken könnte ich mir, dass R sich vielleicht über das Leerzeichen in der Spaltenüberschrigt "Anzahl Genehmigungen" ärgert und daraus eine "Anzahl.Genehmigungen" macht, aber wie schon gesagt.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten