2013-07-22 35 views
0

我希望有人能幫助我。根據前一行的值創建新列

I have a data like this:    
subject  choice 
1    3 
2    3  
3    1  
4    4  
5    3  
6    2  
7    2  
8    3  

現在我想創建一個基於'choice'列值的新列。如果選擇列的值是新的(以前從未發生過),則新列的值將爲'否',否則,如果該值已經出現在前一行上,則新列的值將爲'Soc' 。新表將如下所示:

subject  choice newcolumn 
    1    3   No 
    2    3   Soc 
    3    1   No 
    4    4   No 
    5    3   Soc 
    6    2   No 
    7    2   Soc 
    8    3   Soc 

有人可以幫我嗎?在此先感謝

+1

看看'的duplicated' – Arun

+0

可能重複[創建基於其他兩個值新列列(http://stackoverflow.com/questions/17812946/create-new-column-based-on-values-on-other-two-columns) – joran

回答

0

還有一堆的方法可以做到這一點,但使用支架子集將教你關於R一些有用的東西:

# Make your example reproducible 
subject <- 1:8 
choice <- c(3, 3, 1, 4, 3, 2, 2, 3) 
d <- data.frame(subject, choice) 

# Create a new column, set all teh values to "No 
d$newColumn <- "No" 
# Set those values for which choice is duplicated to "Soc" 
d$newColumn[duplicated(d$choice)] <- "Soc" 
4

使用示例數據

DF <- data.frame(subject = 1:8, choice = c(3, 3, 1, 4, 3, 2, 2, 3)) 

我會做

DF <- transform(DF, newcolumn = c("No","Soc")[duplicated(choice) + 1]) 

subject choice newcolumn 
1  1  3  No 
2  2  3  Soc 
3  3  1  No 
4  4  4  No 
5  5  3  Soc 
6  6  2  No 
7  7  2  Soc 
8  8  3  Soc 

沒有transform(),這將使用duplicatedifelse

DF$newcolumn <- c("No","Soc")[duplicated(DF$choice) + 1]) 
1

另一種選擇:

transform(DF, newcolumn = ifelse(!duplicated(choice),'No','Soc')) 

## subject choice newcolumn 
## 1  1  3  No 
## 2  2  3  Soc 
## 3  3  1  No 
## 4  4  4  No 
## 5  5  3  Soc 
## 6  6  2  No 
## 7  7  2  Soc 
## 8  8  3  Soc 
相關問題