写一个R sript来计算数据框中的平均值

时间:2018-04-12 14:41:59

标签: r shell loops dataframe slice

我有一组csv格式的数据文件;大约60个。每个文件都包含一个测试主题的数据。这些文件包含数据框,行是100个不同的分类变量,但它们是数字的,我想得到每个变量的计数。列是3个不同的连续变量,我想计算/类别的平均值。

我想创建一个R脚本,稍后我可以使用shell脚本循环,以便在所有60个文件中获取这些变量的方法,并将数据放在数据框文件中,该文件将包含行中的主题ID并且列将具有每个类别3个不同连续变量的平均值。

有人可以帮我吗?感谢

     ID  X. Label CallCounts CallDuration MeanDuration Peak.freq..mean. Peak.ampl..mean.
1   1F1  NA    NA        100       12.221      0.12221            41670         -71.1401
2         1     5         NA           NA      0.09500            46800         -73.3100
3         2     4         NA           NA      0.12900            41300         -75.2500
4         3     4         NA           NA      0.14400            41500         -72.4800
5         4     4         NA           NA      0.11000            40300         -75.2500
6         5     3         NA           NA      0.03600            41500         -83.7700
7         6     2         NA           NA      0.04900            40600         -81.2700
8         7     5         NA           NA      0.02100            49800         -64.6800
9         8     7         NA           NA      0.18700            42900         -61.0500
10        9    19         NA           NA      0.18700            41600         -67.7300
11       10     0         NA           NA      0.15900            40500         -64.3700
12       11     0         NA           NA      0.15000            40600         -70.3900
13       12     3         NA           NA      0.04300            40200         -81.2700
14       13     8         NA           NA      0.11900            41500         -75.2500
15       14     2         NA           NA      0.11300            39700         -83.7700
16       15     5         NA           NA      0.03600            41600         -75.2500
17       16     0         NA           NA      0.07600            41000         -69.7900
18       17    12         NA           NA      0.13200            46500         -62.4300
19       18     7         NA           NA      0.13500            42100         -58.9900
20       19     6         NA           NA      0.05800            43100         -59.1600
21       20     9         NA           NA      0.01500            43400         -81.2700
22       21     2         NA           NA      0.07300            41900         -68.2000
23       22     2         NA           NA      0.06700            43200         -87.2900
24       23     5         NA           NA      0.16500            42400         -68.2000
25       24     8         NA           NA      0.14100            41300         -70.3900
26       25     0         NA           NA      0.13200            40600         -72.4800
27       26     6         NA           NA      0.07300            39000         -81.2700
28       27     3         NA           NA      0.16200            40500         -74.2200
29       28    14         NA           NA      0.17800            39800         -79.3300
30       29     0         NA           NA      0.11300            38400         -76.4100
31       30     7         NA           NA      0.12500            40200         -71.7300
32       31     6         NA           NA      0.09800            39500         -72.4800
33       32    19         NA           NA      0.07300            48900         -55.2500
34       33     6         NA           NA      0.13200            42800         -74.2200
35       34    10         NA           NA      0.14700            43200         -67.7300
36       35     2         NA           NA      0.08900            38500         -77.7500
37       36     5         NA           NA      0.03300            43900         -73.3100
38       37    19         NA           NA      0.09200            46500         -73.3100
39       38     7         NA           NA      0.16800            41100         -71.0300
40       39     6         NA           NA      0.15900            42400         -71.7300
41       40     5         NA           NA      0.19900            40800         -72.4800
42       41     5         NA           NA      0.21500            41600         -68.7000
43       42     5         NA           NA      0.15000            41800         -63.2100
44       43     5         NA           NA      0.12900            38700         -72.4800
45       44     0         NA           NA      0.10100            38000         -74.2200
46       45     8         NA           NA      0.15000            46000         -62.9400
47       46    10         NA           NA      0.12900            41600         -64.3700
48       47     0         NA           NA      0.18400            41500         -62.9400
49       48     5         NA           NA      0.15600            40600         -71.7300
50       49     2         NA           NA      0.03900            38400         -81.2700
51       50     5         NA           NA      0.13800            39800         -71.0300
52       51    14         NA           NA      0.15600            41600         -61.4900
53       52     8         NA           NA      0.13500            39700         -73.3100
54       53     3         NA           NA      0.11300            39300         -73.3100
55       54     6         NA           NA      0.16200            40800         -70.3900
56       55     5         NA           NA      0.07900            38500         -72.4800
57       56    12         NA           NA      0.12900            46000         -59.8700
58       57     4         NA           NA      0.14400            39700         -77.7500
59       58     2         NA           NA      0.03900            43700         -69.2300
60       59     6         NA           NA      0.10700            42100         -74.2200
61       60     0         NA           NA      0.15600            41100         -59.8700
62       61     5         NA           NA      0.19000            41800         -60.2400
63       62     8         NA           NA      0.15600            40300         -71.0300
64       63     7         NA           NA      0.16800            38500         -81.2700
65       64    13         NA           NA      0.15000            39300         -74.2200
66       65     2         NA           NA      0.10100            40200         -81.2700
67       66     7         NA           NA      0.14100            40000         -70.3900
68       67     7         NA           NA      0.11900            42300         -58.1900
69       68     6         NA           NA      0.17800            40300         -74.2200
70       69     3         NA           NA      0.05200            43600         -75.2500
71       70     7         NA           NA      0.11900            46000         -65.7000
72       71     7         NA           NA      0.15900            42400         -66.8600
73       72     7         NA           NA      0.14100            41300         -66.0700
74       73     4         NA           NA      0.20500            40600         -77.7500
75       74     4         NA           NA      0.14700            40200         -77.7500
76       75     5         NA           NA      0.07300            38700         -81.2700
77       76     5         NA           NA      0.14700            41600         -70.3900
78       77     6         NA           NA      0.15600            39200         -79.3300
79       78     5         NA           NA      0.06400            42400         -72.4800
80       79    14         NA           NA      0.13200            42300         -65.3500
81       80     7         NA           NA      0.15000            42300         -65.7000
82       81     5         NA           NA      0.00900            41100         -72.4800
83       82     7         NA           NA      0.16800            40800         -66.8600
84       83     5         NA           NA      0.13500            39000         -72.4800
85       84    12         NA           NA      0.18700            42600         -72.4800
86       85     5         NA           NA      0.11600            40500         -71.7300
87       86    18         NA           NA      0.08600            41500         -70.3900
88       87    14         NA           NA      0.10400            43600         -71.0300
89       88     3         NA           NA      0.18100            41800         -69.7900
90       89     3         NA           NA      0.14700            41000         -67.7300
91       90     0         NA           NA      0.09800            40500         -71.0300
92       91     6         NA           NA      0.16200            41300         -67.2900
93       92     2         NA           NA      0.08200            38800         -87.2900
94       93    10         NA           NA      0.09200            48600         -60.8400
95       94    10         NA           NA      0.04600            48600         -69.2300
96       95    11         NA           NA      0.05200            47500         -72.4800
97       96     8         NA           NA      0.17500            41600         -69.2300
98       97     7         NA           NA      0.15900            42100         -61.9400
99       98     5         NA           NA      0.14700            39800         -68.7000
100      99     8         NA           NA      0.15900            40300         -68.2000
101     100     7         NA           NA      0.14400            40800         -67.7300
    Fundamental..mean. Bandw..mean.
1                30644        29112
2                 4200         5000
3                 2400        82800
4                41500         2400
5                 2500        82800
6                41500        82800
7                40600        82800
8                 4500         6800
9                42900         2200
10               41600         2100
11               40500         1100
12               40600         1400
13               40200        82800
14               41500        82800
15               39700        82800
16               41600        82800
17               41000         1400
18                3800         5500
19               42100         1600
20               43100         1300
21                1600        82800
22               41900         1600
23                   0        82800
24               42400         2400
25               41300         1700
26               40600         1100
27               39000        82800
28                1100        82800
29               39800        82800
30               38400        82800
31                1200         2600
32               39500         1700
33               48900         3700
34               42800        82800
35                2800         5300
36               38500        82800
37               43900         1900
38                2900         4200
39               41100         1900
40               42400         2700
41               40800         2400
42               41600         2600
43               41800         2700
44               38700         1700
45               38000        82800
46                3200         4800
47               41600         2400
48               41500         1400
49               40600         2200
50               38400        82800
51               39800         1900
52               41600         2100
53               39700        40600
54                1400         2100
55               40800         2200
56               38500        39800
57                2800         4300
58               39700        82800
59               43700         2400
60               42100        82800
61               41100         1100
62               41800         1600
63               40300         1700
64               38500        82800
65               39300        82800
66               40200        82800
67               40000         1900
68                3800         4300
69                1900        82800
70               43600        82800
71                2000         4000
72               42400         4200
73                1900         2700
74               40600        82800
75                1600        82800
76               38700        82800
77               41600         5600
78               39200        82800
79               42400         3500
80               42300         2100
81               42300         1700
82               41100        41500
83                1600         2600
84               39000        40300
85                   0         6500
86               40500         1300
87               41500         1300
88               43600         2100
89               41800         2600
90                1400         3500
91               40500          900
92               41300         1900
93               38800        82800
94               48600         1900
95                6000         7300
96                5900         6900
97               41600        42100
98                1400         6300
99               39800         2100
100                900        41900
101               1400         2600

所以Label列是分类变量,我想为每个不同的Labels计算MeanDuration,Peak.Freq和Peak.ampl的均值。我希望通过创建一个具有主题ID的最终表来对所有60个文件进行相同的操作,该主题ID是行中每个文件的名称,列将具有每个标签(类别)的每个提到的变量的平均值。

1 个答案:

答案 0 :(得分:0)

我不认为你需要一个forloop来说实话。我根据您提供的数据做出了相当多的假设,但这应该可以让您使用library(tidyverse)开始:

library(tidyverse)
# Get list of all files
files = list.files(path = "/path_of_directory_containing_all_csv_files", #TODO Change
                   pattern = "*.csv")

file_df <- data_frame(files)

# Change working directory to csv location
checkpoint_wd <- getwd()
setwd("/path_of_directory_containing_all_csv_files/") #TODO Change

# Read in each file and aggregrate to a single dataframe
raw_df <- do.call(rbind, lapply(file_df$files, function(x){
  read_csv(x, na = c("", "NA")) %>% # Specify the NAs here
    select(1:10) %>% # This will keep the same number of columns
    mutate(Source = x) %>%  # This will keep track of which data comes from which file
    fill(ID) # This will fill in the NAs in the ID column
}))

# Reset working directory
setwd(checkpoint_wd)

# Now calculate means
df <- raw_df %>% 
  group_by(ID, Source, Label) %>% 
  mutate(MeanDuration = mean(MeanDuration, na.rm = TRUE),
         Peak.freq = mean(Peak.freq, na.rm = TRUE), #TODO Change
         Peak.ampl = mean(Peak.ampl, na.rm = TRUE)) #TODO Change

您需要使用#TODO Change更改我指示的代码。对于最终mutate,您的数据中的列名称与您声明的列名称之间可能存在一些差异。所以你可能也需要改变这些。