我希望有人能帮助我。
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”列的值创建一个新列。如果choice列上的值是新的(以前从未出现过),则新列上的值将为'No',否则,如果该值已出现在以前的行中,则新列中的值将为'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有人能帮帮我吗?提前感谢
发布于 2013-07-23 04:16:30
使用示例数据
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-23 04:59:57
使用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发布于 2013-07-23 04:06:47
有很多方法可以做到这一点,但是使用括号子集将教会你一些关于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"https://stackoverflow.com/questions/17796335
复制相似问题