我正在选修数据挖掘课程,需要使用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"
}
}`发布于 2015-02-08 15:24:27
我们可以使用数字索引或ifelse创建"V4“列。V1=='A' & V2==2提供一个逻辑索引(TRUE/FALSE)。添加1,将逻辑向量强制到二进制(1/0),并给出对应于TRUE/FALSE的2/1。此数值可用作索引,将其替换为“`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 )。符合条件的V4行(V1=='A' & V2==2)被分配给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))发布于 2015-02-08 21:56:57
将向量设置为defautl值,然后使用逻辑索引替换正确的实例。
data$V4 <- "Nope"
data$V4[ data$V1[g]=="A" & data$V2[g]==2] <- "Eureka"https://stackoverflow.com/questions/28395657
复制相似问题