如何根据另一个data.frame中的用户ID记录为data.frame中的用户赋值

时间:2016-02-27 12:26:12

标签: r excel

我在R中读取了excel文件,其中sheet1有51500行,5列,而表2有买家的用户ID(只有一列)。 目标:旨在提取sheet_1中用户ID出现在表2中的用户。 这是两个示例输入文件和所需的输出:

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。有没有直接的方法可以完成这项任务?非常感谢!!

1 个答案:

答案 0 :(得分:0)

您提供的测试用例有帮助,谢谢。如评论中所述,您需要对您感兴趣的行进行子集化并为其赋值。通过将!放在语句前面(注意大括号!),您将取消该语句,从而选择在上一次调用中未选择的所有记录。

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