df中的子集值基于另一个df

时间:2015-11-26 16:54:26

标签: r function if-statement dataframe subset

我有两个dfs,都是昏暗的[1] 54 210。一个(让我们称之为dfx)包含1,0,以在测试中标记不正确和正确的答案。 dfy包含每个问题的响应时间。我想(merge()(可能)来自dfy的{​​{1}}中{= 1}的所有项目。dfx数据为宽格式,ID = rownames,列代表每个问题

示例:

DFX

Q1 Q2 Q3 Q4 Q5 …
1  1  1  1  1
1  1  1  1  1
1  1  0  1  1 
1  1  0  1  1 

DFY

Q1_3 Q2_3  Q3_3  Q4_3  Q5_3 ...
16.01 8.23 18.13 11.14 18.03
17.25 7.50 11.72 10.84  7.24

我需要dfz作为dfy的子集,如果dfx[Q1] == 1dfy [Q1_3]将返回dfz[Q1_3],否则NAdfx[Q1] (这是0)。

如果我按

指定cols,我可以这样做
dfz<- cbind(ifelse(dfx$Q1 == 1, dfy$Q1_3, dfx$Q1))

但是我不知道如何将它应用于整个df。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果两个数据框的大小相同,并且final只有1和0,您可以将它们相乘以获得所需内容:

dfx

在下一条评论中,您询问如何根据其他数据框的值操纵数据框中的列。我经常使用sqldf package来做这种事情。它允许您使用SQL指令操作数据帧。您需要一些dfz <- dfy * dfx 列,以便让您与数据框架相关联。

一个简单的例子:

id

如您所见,您可以像数据库中的表一样加入数据帧。

希望这有帮助。