根据以前行的值创建新列

时间:2013-07-22 19:59:02

标签: r

我希望有人可以帮助我。

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
有人能帮帮我吗?提前谢谢

3 个答案:

答案 0 :(得分: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(),这将是

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

答案 1 :(得分:1)

使用duplicatedifelse的其他选项:

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

答案 2 :(得分: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"
相关问题