2017-05-30 73 views
0

我想基於它是否是重複行來創建新列。我有我的數據按用戶#排序然後日期。我希望新列檢查第一列中的值是否等於之前的行,然後對日期執行相同的操作。如果語句基於R中的重複行創建新列

比如我有數據的前兩列,並希望建立在第3列中的布爾數組它是否是一個新的一天,一個新用戶:

User# Date  Unique 
1  1/1/17 1 
1  1/1/17 0 
1  1/2/17 1 
2  1/1/17 1 
3  1/1/17 1 
3  1/2/17 1 
+2

歡迎[堆棧溢出(http://stackoverflow.com)!在這個網站,你應該嘗試**自己編寫代碼**。在[做更多研究]之後(http://meta.stackoverflow.com/questions/261592),如果你有問題,你可以**發佈你已經嘗試過**的清單,說明什麼是不工作的**並提供一個** [最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)**。我建議閱讀[如何提出一個好問題](http://stackoverflow.com/questions/how-to-ask)。另外,一定要採取[旅遊](http://stackoverflow.com/tour) – AWinkle

回答

0

有可能是一個錯字在被設置爲最後一排的樣本數據是按照給定的標準唯一

df1$Unique <- c(1, diff(df1$User) != 0 | diff(df1$Date) != 0) 

    User  Date Unique 
1 1 2017-01-01  1 
2 1 2017-01-01  0 
3 1 2017-01-02  1 
4 2 2017-01-01  1 
5 3 2017-01-01  1 
6 3 2017-01-02  1 

更新

如果用戶是商店d的因素,然後下面的工作

User <- c(1, 1, 1, 2, 3, 3) 
User <- letters[User] 
Date <- c("1/1/17", "1/1/17", "1/4/17", "1/1/17", "1/1/17", "1/2/17") 
df1 <- data.frame(User, Date) 
df1$Date <- as.Date(df1$Date, "%m/%d/%y") 

df1$Unique <- c(1, diff(as.numeric(df1$User)) != 0 | diff(df1$Date) > 1) 

    User  Date Unique 
1 a 2017-01-01  1 
2 a 2017-01-01  0 
3 a 2017-01-04  1 
4 b 2017-01-01  1 
5 c 2017-01-01  1 
6 c 2017-01-02  0 
+0

有沒有一種方法,你會適應上面的代碼,如果用戶ID混合的字母和數字?如果日期差異小於2天,則適應「獨特」?我將你的方法應用到我的數據中,第一行得到「1」,然後在剩下的部分得到NA。提前致謝。 – PMo

+0

@PMo更新了答案,以包含以文本和日期範圍存儲的用戶 – manotheshark

0

這可能給你你在找什麼

library(dplyr) 

User <- c(1,1,1,2,3,3) 
Date <- c("1/1/17","1/1/17","1/2/17","1/1/17","1/1/17","1/2/17") 

df <- data.frame(User,Date,stringsAsFactors = FALSE) 

df <- df %>% 
     group_by(User, Date) %>% 
     mutate(Unique = if_else(duplicated(Date) == FALSE, 1, 0)) 
+0

完美謝謝,而且我更改了錯字頂部,您是正確的 – PMo