根据其他列的ID在列中分配相同的值

时间:2017-04-03 13:55:47

标签: r powerquery

我的数据集如下所示,

Id    item   Same-item       Review
1     v1     10              Accept
2     v2     1               Accept
3     v3     4               Reject
4     v4     10              Accept
5     v5     10              null
6     v6     10              null
7     v7     5               null
8     v8     10              null
9     v9     10              null
10    v10    10              null
11    v11    10              null
12    v12    10              null
13    v13    10              null

我正在尝试根据“Same-item”列(充当id)将Review列设置为“Accept / Reject”。例如:对于项目v1,Same-item = 10,以及Review =“Accept”,在少数情况下,但“review”为“null”,应为“Accept” 看起来如下

Id    item   Same-item       Review
1     v1     10              Accept
2     v2     1               Accept
3     v3     4               Reject
4     v4     10              Accept
5     v5     10              Accept
6     v6     10              Accept
7     v7     5               null
8     v8     10              Accept
9     v9     10              Accept
10    v10    10              Accept
11    v11    10              Accept
12    v12    10              Accept
13    v13    10              Accept

我试过条件,但无法实现。你能指导我完成这一步吗?欢迎任何想法。感谢。

2 个答案:

答案 0 :(得分:1)

我们可以使用data.table执行此操作。转换' data.frame'到' data.table' (setDT(df1)),按' Same.item'分组。 if any项目是'接受'在'评论'列返回'接受'或else返回'评论'值并将其分配(:=)到'评论'

library(data.table)
setDT(df1)[, Review := if(any(Review == "Accept")) "Accept" else Review, Same.item]
df1
#    Id item Same.item Review
# 1:  1   v1        10 Accept
# 2:  2   v2         1 Accept
# 3:  3   v3         4 Reject
# 4:  4   v4        10 Accept
# 5:  5   v5        10 Accept
# 6:  6   v6        10 Accept
# 7:  7   v7         5   null
# 8:  8   v8        10 Accept
# 9:  9   v9        10 Accept
#10: 10  v10        10 Accept
#11: 11  v11        10 Accept
#12: 12  v12        10 Accept
#13: 13  v13        10 Accept

答案 1 :(得分:0)

假设您正在尝试覆盖Review列,而不是具有重复的Same-item值的行,我们可以使用它:

foo$Review[duplicated(foo$Same-item)] <- "Accept"