2015-11-27 124 views
-1

在R I具有包含usergamenumber和其是次game已打了一个固定user数量data.frame data错误在if语句

让固定的用户给予和考虑这个

user game number 
1  1  110 
1  2  95 
1  3  263 
1  4  55 
1  5  24 
1  6  10 

现在我正在寻找游戏,是占主导地位。占统治地位的游戏是一场游戏,而不是用户玩过25%的时间。 我想找到该游戏已经出场超过25%,在这种情况下的时代,所以我键入

u=c() 
for(j in 1:6) { 
# Check if the percentages is higher than 25 
if(data[j,3]/sum(data[,3]) > 0.25) { 
u[j]=data[j,2] 
} 
else{u[j]=0} 

但是,当我在RI键入此得到这个奇怪的消息

Error in if(....): missing value where TRUE/FALSE needed 
+1

添加一个'}'在代码的末尾,它会正常运行 – etienne

+3

最好使用'ifelse(data [,3]> 0.25 * colSums(data)[[3]],data [,2],0)'而不是for循环。这也可能是一个可以通过'data.table' – etienne

+0

与@etienne一致解决的问题,这可以通过'data.table'更容易完成,避免了for循环。例如:'dt = data.table(data)'然后'u = dt [dt $ number> sum(dt $ number)]'似乎回答了给定的问题。 –

回答

1

你忘了添加> 0.25。 还你现在初始化的U矢量u[j]将导致一个错误,因为U具有长度为0

解决问题的一个好办法这样是使用dplyr包

newdata <- data %>% group_by(user) 
        %>% mutate(perc = number/sum(number)) 
        %>% filter(perc > 0.25)