首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于前一行上的值创建新列

基于前一行上的值创建新列
EN

Stack Overflow用户
提问于 2013-07-23 03:59:02
回答 3查看 1.4K关注 0票数 0

我希望有人能帮助我。

代码语言:javascript
复制
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‘。新表将如下所示:

代码语言:javascript
复制
 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

有人能帮帮我吗?提前感谢

EN

回答 3

Stack Overflow用户

发布于 2013-07-23 04:16:30

使用示例数据

代码语言:javascript
复制
DF <- data.frame(subject = 1:8, choice = c(3, 3, 1, 4, 3, 2, 2, 3))

我会这么做的

代码语言:javascript
复制
DF <- transform(DF, newcolumn = c("No","Soc")[duplicated(choice) + 1])

给予

代码语言:javascript
复制
  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(),这将是

代码语言:javascript
复制
DF$newcolumn <- c("No","Soc")[duplicated(DF$choice) + 1])
票数 4
EN

Stack Overflow用户

发布于 2013-07-23 04:59:57

使用duplicatedifelse的另一种选择

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2013-07-23 04:06:47

有很多方法可以做到这一点,但是使用括号子集将教会你一些关于R的有用的东西:

代码语言:javascript
复制
# 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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17796335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档