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    

现在我想根据“选择”列的值创建一个新列。如果选择列上的值是新的(以前从未出现过),则新列上的值将为“否”,否则,如果该值已经出现在先前的行中,则新列中的值将为“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

有人可以帮助我吗?提前致谢

4

3 回答 3

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])
于 2013-07-22T20:16:30.040 回答
1

duplicated使用and 的另一个选项ifelse

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
于 2013-07-22T20:59:56.910 回答
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"
于 2013-07-22T20:06:47.393 回答