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