2015-11-27 150 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)