Neue Spalte im Datensatz mit ausgewählten Werten aus einer anderen Spalte

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

Moderatoren: EDi, jogo

Antworten
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Neue Spalte im Datensatz mit ausgewählten Werten aus einer anderen Spalte

Beitrag von kosa »

Liebe Community,

ich hoffe, dass ihr alle gut ins Neue Jahr gestartet seid. :)

Ich habe eine Frage bzgl. der Generierung einer neuen Spalte mit Werten aus einer anderen Spalte.

Ich habe wie in der beispielhaften Tabelle (df) dargestellt. Personen (ID), die zu mehreren Zeitpunkten (time) ein Fragebogenitem (AV) beantworten. Nun würde ich gern eine neue Spalte (AV.t1) zur Tabelle hinzufügen, in welche die Daten jeder Person zum Messzeitpunkt = 1 übertragen werden. Das ganze sollte dann so aussehen:

Code: Alles auswählen

>df
ID	time		AV		AV.t1
1	1		5		5
1	2		4		5
1	3		2		5
2	1		7		7	
2	2		2		7
2	3		3		7	
3	1		1		1
3	2		5		1
3	3		6		1
Kann mir da jemand helfen?

Viele Grüße,

kosa
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Neue Spalte im Datensatz mit ausgewählten Werten aus einer anderen Spalte

Beitrag von jogo »

Hallo kosa,

Code: Alles auswählen

df$AV.t1 <- ave(df$AV, df$ID, FUN=function(x) x[1])
Gruß, Jörg
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Neue Spalte im Datensatz mit ausgewählten Werten aus einer anderen Spalte

Beitrag von kosa »

Vielen Dank!

Das ging ja schnell!

Kannst du mir evtl. noch einen Tipp geben, wo ich Funktionen nachschlagen kann?

Ich konnte mir noch nicht erklären, wie R weiß, dass die Spalte "time" mit der Faktorstufe "1" über den Befehl angesprochen wird.


Viele Grüße,

Sabrina
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Neue Spalte im Datensatz mit ausgewählten Werten aus einer anderen Spalte

Beitrag von jogo »

Hallo Sabrina,
kosa hat geschrieben: Fr Jan 03, 2020 5:05 pm Kannst du mir evtl. noch einen Tipp geben, wo ich Funktionen nachschlagen kann?

Code: Alles auswählen

?ave
help("ave")
help(ave)
In RStudio:
- Cursor auf den Funktionsnamen, dann F1
- oder Suchfeld im Help-Tab nutzen (Fenster rechts unten)
Ich konnte mir noch nicht erklären, wie R weiß, dass die Spalte "time" mit der Faktorstufe "1" über den Befehl angesprochen wird.
ähm, habe ich nicht genutzt. Und auf diese Weise könnte das die Funktion ave() auch nicht.
Ich hatte einfach vorausgesetzt, dass die Beobachtung mit time 1 immer die erste in jedem ID-Block ist.
... also ggf. vorher sortieren.
Oder sind Deine Daten doch irgendwie anders, dass die Anforderung an das Vorgehen auch spezieller wird?

Hier ist noch eine data.table-Variante meines vorherigen Codes:

Code: Alles auswählen

library("data.table")

C <- CO2 ## CO2 ist ein Bespieldatensatz, der standardmäßig in R vorhanden ist
setDT(C)
C[, up1:=uptake[1], Plant]
C
Deine Anforderung, sich nach dem Wert einer anderen Spalte zu richten, könnte dann so aussehen:

Code: Alles auswählen

library("data.table")

C <- CO2 ## CO2 ist ein Bespieldatensatz, der standardmäßig in R vorhanden ist
setDT(C)
C[, up1:=uptake[conc==175], Plant]
C
Für eine ähnliche Lösung mit base R wird man by() oder split()+lapply() bemühen.

Viele Grüße,
Jörg
Antworten