मेरा डेटा इस तरह दिखता है

     subject treatment time outcome1 outcome2 
1       1         a    1       80       15
2       1         a    2       75       14
3       1         a    3       74       12
4       2         b    1       90       16
5       2         b    2       81       15
6       2         b    3       76       15

मैं एक नया वेरिएबल बनाना चाहता हूं जो समय 1, 2, 3 पर परिणाम 1 मानों का औसत है। मैं इसे सभी विषयों (40) के लिए करना चाहता हूं। इसके बाद मैं परिणाम २२ तक परिणाम २२ के लिए ऐसा करना चाहूंगा।

मैंने यह कोशिश की

data <- data %>% 
group_by(subject) %>% 
summarise(mkcal = mean(kcal))

लेकिन यह गलत साधन दे रहा है और साधनों को छोड़कर सभी डेटा हटा रहा है। जब मैं संक्षेप में बदलने के बजाय उत्परिवर्तित करने का प्रयास करता हूं तो यह एक नया कॉलम बनाता है जो कि केकेसी कॉलम की एक प्रति है। मैं क्या गलत कर रहा हूं?

पढ़ने के लिए धन्यवाद।

1
DiscoR 21 सितंबर 2018, 20:34

1 उत्तर

सबसे बढ़िया उत्तर

dplyr का उपयोग करना:

df %>%
  group_by(subject) %>%
  mutate_at(vars(contains("outcome")), funs(mean = mean(., na.rm = TRUE)))

# A tibble: 6 x 7
# Groups:   subject [2]
  subject treatment  time outcome1 outcome2 outcome1_mean outcome2_mean
    <int> <fct>     <int>    <int>    <int>         <dbl>         <dbl>
1       1 a             1       80       15          76.3          13.7
2       1 a             2       75       14          76.3          13.7
3       1 a             3       74       12          76.3          13.7
4       2 b             1       90       16          82.3          15.3
5       2 b             2       81       15          82.3          15.3
6       2 b             3       76       15          82.3          15.3

आंकड़े:

df <- read.table(text = "subject treatment time outcome1 outcome2 
1       1         a    1       80       15
           2       1         a    2       75       14
           3       1         a    3       74       12
           4       2         b    1       90       16
           5       2         b    2       81       15
           6       2         b    3       76       15", header = TRUE)
2
tmfmnk 21 सितंबर 2018, 20:54