【发布时间】:2017-12-28 10:54:37
【问题描述】:
我有两个数据框:
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))
还有:
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
所以我想根据以下条件在 df1 中生成一个虚拟变量:
if df1$ID == df2$ID
if df1$settle == df2$invoice
if df1$amount == df2$amount
if df1$reason == df2$reason
所以如果条件满足,我的新列应该等于1,否则为0。
带有新变量的df1 如下所示:
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
我试过了:
df1$newvar <- ifelse(df1$ID == df2$ID &
df1$settle == df2$invoice &
df1$amount == df2$amount &
df1$reason == df2$reason, 1, 0)
我收到警告消息:
"longer object length is not a multiple of shorter object length"
所以我认为 ifelse 是不可能的,因为我的两个数据框大小不同(df1 中的 ID 多于 df2 中的 ID)。
你能帮我解决这个问题吗?
在 SPSS 或 Stata 中,我只使用 IF 命令,但 R 对我来说很新!
编辑
我已经更改了我的测试数据框,因此它们与我使用的更相似。 我还使用新变量添加了 df1 的视图。
【问题讨论】:
-
也许你需要
%in%而不是== -
对于给定的测试数据,你期望只有 0?
-
@Dennis:不,我添加了 df1 的视图,作为我希望新变量最终出现在我的测试数据中的方式。
标签: r if-statement dataframe