आर

2015-05-16 14 views
7

में मध्यस्थ के साथ डेटा को अवरुद्ध करने के लिए मुझे एनए मानों के साथ उस विशेष दिन ("दिनांक" द्वारा समूह) पर गणना की गई "चरणों" के मध्य द्वारा "चरणों" फ़ील्ड में लापता मानों को प्रतिस्थापित करने की आवश्यकता है। मैंने पहले से ही इस thread को संदर्भित किया है लेकिन मेरे एनए मानों को प्रतिस्थापित नहीं किया गया है। क्या कोई मुझे यह जानने में मदद कर सकता है कि मैं कहां गलत हो रहा हूं? मैं बेस पैकेज/डेटा टेबल/प्लीयर का उपयोग करना पसंद करूंगा। डेटासेट लगभग दिखता है। इस तरह: -आर

 steps  date interval 
    1: NA 2012-10-01  0 
    2: NA 2012-10-01  5 
    3: NA 2012-10-01  10 
    4: NA 2012-10-01  15 
    5: NA 2012-10-01  20 
    ---       
17564: NA 2012-11-30  2335 
17565: NA 2012-11-30  2340 
17566: NA 2012-11-30  2345 
17567: NA 2012-11-30  2350 
17568: NA 2012-11-30  2355 

संरचना और डाटासेट (गतिविधि) का सारांश के रूप में नीचे

#str(activity) 
Classes ‘data.table’ and 'data.frame': 17568 obs. of 3 variables: 
    $ steps : int NA NA NA NA NA NA NA NA NA NA ... 
    $ date : Date, format: "2012-10-01" "2012-10-01" "2012-10-01" ... 
    $ interval: int 0 5 10 15 20 25 30 35 40 45 ... 

#summary(activity) 
     steps    date    interval  
    Min. : 0.00 Min. :2012-10-01 Min. : 0.0 
    1st Qu.: 0.00 1st Qu.:2012-10-16 1st Qu.: 588.8 
    Median : 0.00 Median :2012-10-31 Median :1177.5 
    Mean : 37.38 Mean :2012-10-31 Mean :1177.5 
    3rd Qu.: 12.00 3rd Qu.:2012-11-15 3rd Qu.:1766.2 
    Max. :806.00 Max. :2012-11-30 Max. :2355.0 
    NA's :2304  

हालात से पता चला मैंने कोशिश की है:

DataTable विधि:

activityrepNA<-activity[,steps := ifelse(is.na(steps), median(steps, na.rm=TRUE), steps), by=date] 
summary(activityrepNA) 
    steps    date    interval  
Min. : 0.00 Min. :2012-10-01 Min. : 0.0 
1st Qu.: 0.00 1st Qu.:2012-10-16 1st Qu.: 588.8 
Median : 0.00 Median :2012-10-31 Median :1177.5 
Mean : 37.38 Mean :2012-10-31 Mean :1177.5 
3rd Qu.: 12.00 3rd Qu.:2012-11-15 3rd Qu.:1766.2 
Max. :806.00 Max. :2012-11-30 Max. :2355.0 
NA's :2304 

एवी

का उपयोग करना

स्टीवन Beaupre मदद की:

का उपयोग कर में बदलें

activity %>% group_by(date) %>% mutate(steps = replace(steps, is.na(steps), median(steps, na.rm = T))) 
Source: local data table [17,568 x 3] 

    steps  date interval 
1  NA 2012-10-01  0 
2  NA 2012-10-01  5 
3  NA 2012-10-01  10 
4  NA 2012-10-01  15 
5  NA 2012-10-01  20 
6  NA 2012-10-01  25 
7  NA 2012-10-01  30 
8  NA 2012-10-01  35 
9  NA 2012-10-01  40 
10 NA 2012-10-01  45 
.. ...  ...  ... 

अद्यतन कोड के लिए औसत

whynoclean<-aggregate(activity,by=list(activity$date),FUN=median,na.rm=TRUE) 
> summary(whynoclean) 
    Group.1    steps  date    interval 
Min. :2012-10-01 Min. :0 Min. :2012-10-01 Min. :1178 
1st Qu.:2012-10-16 1st Qu.:0 1st Qu.:2012-10-16 1st Qu.:1178 
Median :2012-10-31 Median :0 Median :2012-10-31 Median :1178 
Mean :2012-10-31 Mean :0 Mean :2012-10-31 Mean :1178 
3rd Qu.:2012-11-15 3rd Qu.:0 3rd Qu.:2012-11-15 3rd Qu.:1178 
Max. :2012-11-30 Max. :0 Max. :2012-11-30 Max. :1178 
         NA's :8      

संपादित उत्पादन की गणना के लिए ddply

cleandatapls<-ddply(activity, 
+  .(as.character(date)), 
+  transform, 
+  steps=ifelse(is.na(steps), median(steps, na.rm=TRUE), steps)) 
> summary(cleandatapls) 
as.character(date)  steps    date    interval  
Length:17568  Min. : 0.00 Min. :2012-10-01 Min. : 0.0 
Class :character 1st Qu.: 0.00 1st Qu.:2012-10-16 1st Qu.: 588.8 
Mode :character Median : 0.00 Median :2012-10-31 Median :1177.5 
        Mean : 37.38 Mean :2012-10-31 Mean :1177.5 
        3rd Qu.: 12.00 3rd Qu.:2012-11-15 3rd Qu.:1766.2 
        Max. :806.00 Max. :2012-11-30 Max. :2355.0 
        NA's :2304 

सकल पर प्रयास मुझे एहसास हुआ कि प्रलोभन के लिए मेरा दृष्टिकोण त्रुटिपूर्ण था क्योंकि विशिष्ट तिथियां केवल एनए मान थीं जो समस्या का कारण बन रही थी क्योंकि एनए का औसत एनए है। एक और सुझाया गया दृष्टिकोण इस्तेमाल किया।

उत्तर

4

प्रयास करें:

library(dplyr) 
df %>% 
    group_by(date) %>% 
    mutate(steps = ifelse(is.na(steps), median(steps, na.rm = T), steps)) 

किसी निश्चित तिथि के लिए, सभी चरणों NA रों हैं, तो आप उन्हें 0 के साथ बदलें सकता है:

df %>% 
    group_by(date) %>% 
    mutate(steps = ifelse(all(is.na(steps)), 0, 
         ifelse(is.na(steps), median(steps, na.rm = T), steps))) 
+0

धन्यवाद! क्या मुझे पुस्तकालय लोड करने की ज़रूरत है? यह कह रहा है कि फ़ंक्शन%>% – Meeshu

+0

नहीं ढूंढ सका 'install.packages ("dplyr"); लाइब्रेरी (dplyr) ' –

+0

हाय, फिर से धन्यवाद, लेकिन मुझे इसे चरणों के मध्यस्थ (एनए मानों को हटाने के बाद गणना) और अंतराल के औसत के साथ प्रतिस्थापित करने की आवश्यकता नहीं है। मैंने अंतराल को चरणों के साथ बदलकर कोड की कोशिश की और एनए अभी भी बनी हुई है। – Meeshu