2013-07-22 32 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 
相关问题