首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R数据中的新条件列

R数据中的新条件列
EN

Stack Overflow用户
提问于 2015-02-08 15:22:53
回答 2查看 141关注 0票数 0

我正在选修数据挖掘课程,需要使用randomForest操作一些数据来完成所需的任务。V1、V2和V3是列名。如果是V1=A和V2=2,我希望R将"Eureka“输出到新列V4的相应行。我希望将V4中的其他值设置为"NOPE“。实际数据集有300000行6列。这似乎很奇怪,但如果我能学会如何做到这一点,我的问题就会得到解决。谢谢。

代码语言:javascript
复制
  V1  V2   V3   
  A   1    4    
  A   1    8  
  A   2    4  
  A   2    8  
  C   1   10  
  C   1    9  
  C   2   10  
  C   2    9

V1  V2   V3   V4  
A   1    4    NOPE  
A   1    8    NOPE    
A   2    5    Eureka    
A   2    3    Eureka    
C   1   10    NOPE    
C   1    8    NOPE    
C   2   10    NOPE    
C   2    4    NOPE   

以下代码不起作用。

代码语言:javascript
复制
`for(g in 1:8){
if(data$V1[g]=="A"&data$V2[g]==2){
data$V4[g]=Eureka
}else{
data$V4[g]="NOPE"
}
}`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 15:24:27

我们可以使用数字索引或ifelse创建"V4“列。V1=='A' & V2==2提供一个逻辑索引(TRUE/FALSE)。添加1,将逻辑向量强制到二进制(1/0),并给出对应于TRUE/FALSE2/1。此数值可用作索引,将其替换为“`NOPE”/“Eureka”。

代码语言:javascript
复制
 df$V4 <- with(df, c('NOPE', 'Eureka')[(V1=='A' & V2==2)+1])
 df
 #  V1 V2 V3     V4
 #1  A  1  4   NOPE
 #2  A  1  8   NOPE
 #3  A  2  4 Eureka
 #4  A  2  8 Eureka
 #5  C  1 10   NOPE
 #6  C  1  9   NOPE
 #7  C  2 10   NOPE
 #8  C  2  9   NOPE

或者使用ifelse

代码语言:javascript
复制
 df$V4 <- with(df, ifelse(V1=='A' & V2==2, 'Eureka', 'NOPE'))   

另一种选择是data.table。将"data.frame“转换为"data.table”(setDT)。使用值V4创建列( NOPE )。符合条件的V4行(V1=='A' & V2==2)被分配给Eureka

代码语言:javascript
复制
 library(data.table)
 setDT(df)[,V4:='NOPE'][V1=='A' & V2==2, V4:='Eureka'][]

关于代码中的错误,应该引用'Eureka‘。最好是使用vectorized方法,而不是循环。

代码语言:javascript
复制
 for(g in 1:8){
  if(df$V1[g]=='A' & df$V2[g]==2){
  df$V4[g] <- 'Eureka'
    }
   else{
  df$V4[g] <- 'NOPE'
  }
 }
 df$V4
 #[1] "NOPE"   "NOPE"   "Eureka" "Eureka" "NOPE"   "NOPE"   "NOPE"   "NOPE"  

数据

代码语言:javascript
复制
 df <- structure(list(V1 = c("A", "A", "A", "A", "C", "C", "C", "C"), 
 V2 = c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), V3 = c(4L, 8L, 4L, 
 8L, 10L, 9L, 10L, 9L)), .Names = c("V1", "V2", "V3"), class = 
"data.frame", row.names = c(NA, -8L))
票数 0
EN

Stack Overflow用户

发布于 2015-02-08 21:56:57

将向量设置为defautl值,然后使用逻辑索引替换正确的实例。

代码语言:javascript
复制
data$V4 <- "Nope"
data$V4[ data$V1[g]=="A" & data$V2[g]==2] <- "Eureka"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28395657

复制
相关文章

相似问题

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