2015-06-30 29 views
0

一个布尔值,我有这样的下列数据框:变化值r中

head(data) 
     Date Avg.Join.Delay Min.Join.Dely Max.Join.Dely ACCOUNT STB_TYPE MARKET 
1 6/5/2015  1194.25   830   2072 2067215110 IPH8010 Seattle 
2 6/5/2015  1215.00   945   1755 2067215110 IPW8000 Seattle 
3 6/5/2015  1666.00   1666   1666 2069370920 IPH8010 Seattle 
4 6/5/2015   546.00   531   561 2069376365 IPW8000 Seattle 
5 6/5/2015   648.00   648   648 3032004397 ISB7005 Denver 
6 6/5/2015   589.50   589   590 3033229232 IPH8005 Denver 

我做什么到目前为止,这是(我的价值观开始500):

quantile(data[,2], probs=0.5) 
50% 
661  
for (i in 500:661) 
data$Avg.Join.Delay[substr(data$Avg.Join.Delay,1,3)==i] <- '0%-50% Error' 
for (i in 662:dim(data)) 
data$Avg.Join.Delay[substr(data$Avg.Join.Delay,1,3)==i] <- '50%-100% Error' 

这样的工作(不包括一些值),所以我想知道是否有一个更好/正确的方式来做到这一点。

+0

你到底想干什么? – mts

+0

@mts将Avg.Join.Delay中的值更改为“boolean”,以确定您是否想要完成的任务是否能够更清楚地解释您是否想要完成的任务是否为0%-50%错误或50%-100%错误 – Nik

+1

?你目前的代码是否总能提供所需的输出?我不明白你为什么要寻找'== i'的'Avg.Join.Delay';你想索引行吗? – rbatt

回答

2

data$Avg.Join.Delay.boolean <- data$Avg.Join.Delay<=median(data$Avg.Join.Delay)

这是否完成你想要什么?

或者,如果你愿意,你在你的问题有文本,实际上不是一个布尔值,你可以

value2insert <- c("51-100% Error", "0-50% Error") 
logical.index <- (data$Avg.Join.Delay<=median(data$Avg.Join.Delay))+1 
data$Avg.Join.Delay.boolean <- value2insert[logical.index] 
+0

是的,它的工作原理。谢谢! – Nik

+0

快速问题。例如,如果我想将它分成80%,我将如何使用相同的方法?我试过了'temp < - quantile(data [,2],probs = 0.8)'然后'logical.index < - (data $ Avg.Join.Delay <= temp(data $ Avg.Join.Delay))+ 1',但它没有工作。给我下面的错误'无法找到函数“temp”' – Nik