我的数据集如下所示,
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
我试过条件,但无法实现。你能指导我完成这一步吗?欢迎任何想法。感谢。
答案 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"