我希望有人可以帮助我。
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
有人能帮帮我吗?提前谢谢
答案 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)
使用duplicated
和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
答案 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"