【发布时间】:2016-02-29 20:24:21
【问题描述】:
我有两个 dfs,都暗淡 [1] 54 210。一个(我们称之为dfx)包含 1、0 来标记测试中不正确和正确的答案。 dfy 包含每个问题的响应时间。我想子集(merge()(也许)来自dfy 的所有项目在dfx 中== 1。数据采用宽格式,ID = 行名,列代表每个问题。
例子:
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
我需要一个作为 dfy 子集的 dfz,其中如果 dfx[Q1] == 1,dfy [Q1_3] 返回为 dfz[Q1_3],否则返回 NA 或 dfx[Q1](即 0)。
如果我指定 cols 就可以了
dfz<- cbind(ifelse(dfx$Q1 == 1, dfy$Q1_3, dfx$Q1))
但是我不知道如何将它应用于整个 df。
有什么想法吗?
【问题讨论】:
-
您的数据框中是否有唯一标识符(我的意思是,就像
id列,让您可以将dfx中的每一行与dfy中的一行进行匹配)?或者,您是否确保两个数据帧的行顺序匹配? -
@Barranka :我可以插入一个 id 列,但是两个 dfs 的 rownames ==
-
它可以像
dfy * dfx这样简单。如果 dfx 只有 1 和 0,则两者的乘积将返回 0 表示不正确的答案,dfy的值表示正确的答案。 -
OMG @Barranka :) 确实解决了我的问题,是的 :) 但是,你知道如何将这个:
dfz<- cbind(ifelse(dfx$Q1 == 1, dfy$Q1_3, dfx$Q1))转换为一个函数,以便我可以根据另一个值操作 dfs 吗? -
检查我的答案...它可能会帮助你(它包括我上面的评论,所以如果你愿意,你可以投票或接受它)
标签: r function if-statement dataframe subset