R数据中的新条件列

时间:2015-02-08 15:22:53

标签: r

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

  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   

以下代码不起作用。

`for(g in 1:8){
if(data$V1[g]=="A"&data$V2[g]==2){
data$V4[g]=Eureka
}else{
data$V4[g]="NOPE"
}
}`

2 个答案:

答案 0 :(得分:0)

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

 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

 df$V4 <- with(df, ifelse(V1=='A' & V2==2, 'Eureka', 'NOPE'))   

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

 library(data.table)
 setDT(df)[,V4:='NOPE'][V1=='A' & V2==2, V4:='Eureka'][]

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

 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"  

数据

 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))

答案 1 :(得分:0)

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

data$V4 <- "Nope"
data$V4[ data$V1[g]=="A" & data$V2[g]==2] <- "Eureka"