2016-02-27 50 views
0

我在R,其中Sheet 1中具有51500行和5列和表2中讀excel文件的用戶ID的記錄將值分配給用戶擁有的買家的用戶ID(唯一一列)。 目的:目的以提取在sheet_1用戶在其用戶ID是發生在片2 下面是兩個例子輸入文件和期望的輸出:如何在data.frame基於從另一個data.frame

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

或(因爲它似乎像所有的數據已經包含在F2),F2 [F2 $狀態== 「通行證」,] – Heroka

+0

@Heroka:謝謝。但是,要澄清的是,在我的玩具示例中,f1只是stdId列,而f2是包含f1中某個stdId的整個表。所以根據f1的stdId,找出f2中的哪個實例是「pass」。謝謝 – Jeff

+0

你說你想要提取那些考試不及格的學生,但是你想要的輸出只顯示那些通過的? –

回答

2

您呈現的幫助測試用例,謝謝。如評論中所述,您需要對感興趣的行進行子集分配並賦值。通過將!在語句的前面(注意括號!),你否定的說法,因此選擇的先前調用未選中的所有記錄。

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 
+0

謝謝。我接受你的答案。 – Jeff

相關問題