【问题标题】:how to assign value to users in a data.frame based on user ID records from another data.frame如何根据来自另一个 data.frame 的用户 ID 记录为 data.frame 中的用户分配价值
【发布时间】:2016-03-01 03:38:10
【问题描述】:

我已经阅读了 R 中的 excel 文件,其中 sheet1 有 51500 行和 5 列,而 sheet 2 有买家的用户 ID(只有一列)。 目标:旨在提取 sheet_1 中 User Id 出现在 sheet 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。有什么直接的方法可以完成这项任务吗?非常感谢!!

【问题讨论】:

  • 或者(好像所有数据都已包含在 f2 中),f2[f2$status=="pass",]
  • @Heroka:谢谢。但是,需要澄清的是,在我的玩具示例中,f1 只是 stdId 列,而 f2 是整个表,其中还包括 f1 中的一些 stdId。所以根据 f1 中的 stdId,找出 f2 中的哪个实例是“通过”的。谢谢
  • 您说要提取未通过测试的学生,但您想要的输出只显示通过的学生?
  • @RomanLuštrik:我已经更新了我的帖子。你能给我一些想法如何在 R 中解决这个问题吗?
  • sheet_1[sheet1[, "User ID"] %in% sheet_2, ] 呢?

标签: r excel


【解决方案1】:

您提供的测试用例有所帮助,谢谢。如 cmets 中所述,您需要对您感兴趣的行进行子集化并为其分配值。通过将! 放在语句前面(注意大括号!),您可以否定该语句,从而选择之前调用中未选择的所有记录。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多