Ich habe zwei Datenrahmen:generieren Spalte, wenn andere Spalten gleich sind
df1 <- data.frame('ID'=c(1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10),
'invoice'=c(24000, 21000, 25000, 21000, 26000, 27000,
28000, 29000, 30000, 31000, 21000, 32000, 33000),
'settle'=c(40000, 40000, 41000, 41000, 42000, 43000, 44000,
45000, 46000, 47000, 47000, 48000, 49000),
'amount'=c(10, 10, 20, 10, 30, 10, 20, 30, 10, 20,
10, 30, 10),
'reason'=c(4, 5, 5, 5, 9, 4, 5, 9, 4, 5, 5, 15, 8))
Und:
df2 <- data.frame('ID'=c(1, 2, 2, 4, 5, 7, 8, 11, 12),
'invoice'=c(40000, 41000, 39000, 43000, 44000, 46000,
47000, 40000, 41000),
'settle'=c(24000, 25000, 21000, 27000, 28000, 30000,
31000, 24000, 25000),
'amount'=c(10, 20, 20, 10, 20, 10, 20, 10, 10),
'reason'=c(4, 5, 5, 4, 5, 4, 5, 4, 4))
df1:
ID invoice settle amount reason
1 24000 40000 10 4
1 21000 40000 10 5
2 25000 41000 20 5
2 21000 41000 10 5
3 26000 42000 30 9
4 27000 43000 10 4
5 28000 44000 20 5
6 29000 45000 30 9
7 30000 46000 10 4
8 31000 47000 20 5
8 21000 47000 10 5
9 32000 48000 30 15
10 33000 49000 10 8
df2:
ID invoice settle amount reason
1 40000 24000 10 4
2 41000 25000 20 5
2 39000 21000 20 5
4 43000 27000 10 4
5 44000 28000 20 5
7 46000 30000 10 4
8 47000 31000 20 5
11 40000 24000 10 4
12 41000 25000 10 4
So würde Ich mag ein Dummy-Variable in df1 von den folgenden Bedingungen generieren:
if df1$ID == df2$ID
if df1$settle == df2$invoice
if df1$amount == df2$amount
if df1$reason == df2$reason
Also, wenn die Bedingungen erfüllt sind, soll meine neue Spalte gleich 1 sein, sonst 0.
df1 mit den neuen variablen würde wie folgt aussehen:
ID invoice settle amount reason newvar
1 24000 40000 10 4 1
1 21000 40000 10 5 0
2 25000 41000 20 5 1
2 21000 41000 10 5 0
3 26000 42000 30 9 0
4 27000 43000 10 4 1
5 28000 44000 20 5 1
6 29000 45000 30 9 0
7 30000 46000 10 4 1
8 31000 47000 20 5 1
8 21000 47000 10 5 0
9 32000 48000 30 15 0
10 33000 49000 10 8 0
ich habe versucht:
df1$newvar <- ifelse(df1$ID == df2$ID &
df1$settle == df2$invoice &
df1$amount == df2$amount &
df1$reason == df2$reason, 1, 0)
erhalte ich die Warnmeldung:
"longer object length is not a multiple of shorter object length"
So gues ich ein ifelse nicht möglich ist, da meine beiden Datenrahmen nicht von der gleichen Größe sind (mehr IDs in df1 als in DF2).
Können Sie mir helfen, dieses Problem zu lösen?
In SPSS oder Stata würde ich nur den IF-Befehl verwenden, aber R ist ziemlich neu für mich!
EDIT
Ich habe meine Testdatenrahmen geändert, so dass sie mehr ähnlich denen sind mit denen ich arbeite. Ich habe auch eine Ansicht von df1 mit der neuen Variable hinzugefügt.
Vielleicht brauchen Sie '% in%' statt '==' – akrun
Mit den gegebenen Testdaten, erwarten Sie nur 0s? – Dennis
@Dennis: Nein, ich habe eine Ansicht von df1 hinzugefügt, so wie ich möchte, dass die neue Variable in meinen Testdaten endet. –