如何根据来自另一个data.frame的用户IDlogging为data.frame中的用户分配值

我已经读了R中的excel文件,其中sheet1有51500行和5列,工作表2有买家的用户ID(只有一列)。 目标 :旨在提取表单2中出现用户标识的表1中的用户。以下是两个示例input文件和所需的输出:

df <- data.frame(User.ID=c(12: 17), Group="Test", Spend=c(15:20), Purchase=c(5:10)) df User.ID Group Spend Purchase 1 12 Test 15 5 2 13 Test 16 6 3 14 Test 17 7 4 15 Test 18 8 5 16 Test 19 9 6 17 Test 20 10 hash.ID <- data.frame(User.ID= c(13:16)) User.ID 1 13 2 14 3 15 4 16 desired output : User.ID Group Spend Purchase Redem_Status 1 12 Test 15 5 Test_NonRedeemer 2 13 Test 16 6 Test_Redeemer 3 14 Test 17 7 Test_Redeemer 4 15 Test 18 8 Test_Redeemer 5 16 Test 19 9 Test_Redeemer 6 17 Test 20 10 Test_NonRedeemer 

基于上面的例子,我们可以看到,如果df中的用户Id存在于hash.ID表中,那么我们添加新的列并将其标记为Test_Redeemer,否则标记为Test_NonRedeemer。 有没有什么简单的方法可以完成这个任务? 非常感谢 !!

你提出的testing用具帮助,谢谢。 正如评论中提到的那样,您需要对感兴趣的行进行子集分配并赋值。 放置! 在声明的前面(注意大括号!),否定声明并select在前一个调用中未被选中的所有logging。

 df[df$User.ID %in% hash.ID$User.ID, "Redem_Status"] <- "Test_Redeemer" df[!(df$User.ID %in% hash.ID$User.ID), "Redem_Status"] <- "Test_NonRedeemer" df User.ID Group Spend Purchase Redem_Status 1 12 Test 15 5 Test_NonRedeemer 2 13 Test 16 6 Test_Redeemer 3 14 Test 17 7 Test_Redeemer 4 15 Test 18 8 Test_Redeemer 5 16 Test 19 9 Test_Redeemer 6 17 Test 20 10 Test_NonRedeemer