library(reshape2)#加载reshape2包

1. cast()将长数据分类总结,整合熔铸

(1)dcast输出的是数据框:

dcast(data,formula,fun.aggregate=NULL,…,margins=NULL,subset=NULL,fill=NULL,drop=TRUE,value.var=guess_value(data))

(2)acast输出的是列表、矩阵、或数组:

acast(data,formula,fun.aggregate=NULL,…,margins=NULL,subset=NULL,fill=NULL,drop=TRUE,value.var=guess_value(data))
  • data: 需处理的数据集
  • formula: 处理数据的规则
  • fun.aggregate: 数据聚合的函数
  • margins: 增加边际的数据,取值为TURE、FALSE或者formula中的变量名
  • subset: data中的数据筛选条件
  • fill:缺失值以0或1代替
  • drop: 是否删除有数据缺失的样本(按行删除)
  • value.var: 指定需要聚合的变量
names(airquality) <- tolower(names(airquality))
head(airquality)
##   ozone solar.r wind temp month day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6
str(airquality)
## 'data.frame':    153 obs. of  6 variables:
##  $ ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
##  $ solar.r: int  190 118 149 313 NA NA 299 99 19 194 ...
##  $ wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
##  $ temp   : int  67 72 74 62 56 66 65 59 61 69 ...
##  $ month  : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ day    : int  1 2 3 4 5 6 7 8 9 10 ...
aqm <- melt(airquality, id = c("month", "day"), na.rm = TRUE)
head(aqm)
##   month day variable value
## 1     5   1    ozone    41
## 2     5   2    ozone    36
## 3     5   3    ozone    12
## 4     5   4    ozone    18
## 6     5   6    ozone    28
## 7     5   7    ozone    23
str(aqm)
## 'data.frame':    568 obs. of  4 variables:
##  $ month   : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ day     : int  1 2 3 4 6 7 8 9 11 12 ...
##  $ variable: Factor w/ 4 levels "ozone","solar.r",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ value   : num  41 36 12 18 28 23 19 8 7 16 ...
# 变量day的值为行标签,month的值为变量名,variable的值为列表第三维度的名称,将数据按variable的值分块,value填充列表
acast(data = aqm, formula = day ~ month ~ variable)
## , , ozone
## 
##      5  6   7   8  9
## 1   41 NA 135  39 96
## 2   36 NA  49   9 78
## 3   12 NA  32  16 73
## 4   18 NA  NA  78 91
## 5   NA NA  64  35 47
## 6   28 NA  40  66 32
## 7   23 29  77 122 20
## 8   19 NA  97  89 23
## 9    8 71  97 110 21
## 10  NA 39  85  NA 24
## 11   7 NA  NA  NA 44
## 12  16 NA  10  44 21
## 13  11 23  27  28 28
## 14  14 NA  NA  65  9
## 15  18 NA   7  NA 13
## 16  14 21  48  22 46
## 17  34 37  35  59 18
## 18   6 20  61  23 13
## 19  30 12  79  31 24
## 20  11 13  63  44 16
## 21   1 NA  16  21 13
## 22  11 NA  NA   9 23
## 23   4 NA  NA  NA 36
## 24  32 NA  80  45  7
## 25  NA NA 108 168 14
## 26  NA NA  20  73 30
## 27  NA NA  52  NA NA
## 28  23 NA  82  76 14
## 29  45 NA  50 118 18
## 30 115 NA  64  84 20
## 31  37 NA  59  85 NA
## 
## , , solar.r
## 
##      5   6   7   8   9
## 1  190 286 269  83 167
## 2  118 287 248  24 197
## 3  149 242 236  77 183
## 4  313 186 101  NA 189
## 5   NA 220 175  NA  95
## 6   NA 264 314  NA  92
## 7  299 127 276 255 252
## 8   99 273 267 229 220
## 9   19 291 272 207 230
## 10 194 323 175 222 259
## 11  NA 259 139 137 236
## 12 256 250 264 192 259
## 13 290 148 175 273 238
## 14 274 332 291 157  24
## 15  65 322  48  64 112
## 16 334 191 260  71 237
## 17 307 284 274  51 224
## 18  78  37 285 115  27
## 19 322 120 187 244 238
## 20  44 137 220 190 201
## 21   8 150   7 259 238
## 22 320  59 258  36  14
## 23  25  91 295 255 139
## 24  92 250 294 212  49
## 25  66 135 223 238  20
## 26 266 127  81 215 193
## 27  NA  47  82 153 145
## 28  13  98 213 203 191
## 29 252  31 275 225 131
## 30 223 138 253 237 223
## 31 279  NA 254 188  NA
## 
## , , wind
## 
##       5    6    7    8    9
## 1   7.4  8.6  4.1  6.9  6.9
## 2   8.0  9.7  9.2 13.8  5.1
## 3  12.6 16.1  9.2  7.4  2.8
## 4  11.5  9.2 10.9  6.9  4.6
## 5  14.3  8.6  4.6  7.4  7.4
## 6  14.9 14.3 10.9  4.6 15.5
## 7   8.6  9.7  5.1  4.0 10.9
## 8  13.8  6.9  6.3 10.3 10.3
## 9  20.1 13.8  5.7  8.0 10.9
## 10  8.6 11.5  7.4  8.6  9.7
## 11  6.9 10.9  8.6 11.5 14.9
## 12  9.7  9.2 14.3 11.5 15.5
## 13  9.2  8.0 14.9 11.5  6.3
## 14 10.9 13.8 14.9  9.7 10.9
## 15 13.2 11.5 14.3 11.5 11.5
## 16 11.5 14.9  6.9 10.3  6.9
## 17 12.0 20.7 10.3  6.3 13.8
## 18 18.4  9.2  6.3  7.4 10.3
## 19 11.5 11.5  5.1 10.9 10.3
## 20  9.7 10.3 11.5 10.3  8.0
## 21  9.7  6.3  6.9 15.5 12.6
## 22 16.6  1.7  9.7 14.3  9.2
## 23  9.7  4.6 11.5 12.6 10.3
## 24 12.0  6.3  8.6  9.7 10.3
## 25 16.6  8.0  8.0  3.4 16.6
## 26 14.9  8.0  8.6  8.0  6.9
## 27  8.0 10.3 12.0  5.7 13.2
## 28 12.0 11.5  7.4  9.7 14.3
## 29 14.9 14.9  7.4  2.3  8.0
## 30  5.7  8.0  7.4  6.3 11.5
## 31  7.4   NA  9.2  6.3   NA
## 
## , , temp
## 
##     5  6  7  8  9
## 1  67 78 84 81 91
## 2  72 74 85 81 92
## 3  74 67 81 82 93
## 4  62 84 84 86 93
## 5  56 85 83 85 87
## 6  66 79 83 87 84
## 7  65 82 88 89 80
## 8  59 87 92 90 78
## 9  61 90 92 90 75
## 10 69 87 89 92 73
## 11 74 93 82 86 81
## 12 69 92 73 86 76
## 13 66 82 81 82 77
## 14 68 80 91 80 71
## 15 58 79 80 79 71
## 16 64 77 81 77 78
## 17 66 72 82 79 67
## 18 57 65 84 76 76
## 19 68 73 87 78 68
## 20 62 76 85 78 82
## 21 59 77 74 77 64
## 22 73 76 81 72 71
## 23 61 76 82 75 81
## 24 61 76 86 79 69
## 25 57 75 85 81 63
## 26 58 78 82 86 70
## 27 57 73 86 88 77
## 28 67 80 88 97 75
## 29 81 77 86 94 76
## 30 79 83 83 96 68
## 31 76 NA 81 94 NA
# 按variable的取值分片,计算每月的日均值:
acast(data = aqm, formula = month ~ variable, fun.aggregate = mean)
##      ozone  solar.r      wind     temp
## 5 23.61538 181.2963 11.622581 65.54839
## 6 29.44444 190.1667 10.266667 79.10000
## 7 59.11538 216.4839  8.941935 83.90323
## 8 59.96154 171.8571  8.793548 83.96774
## 9 31.44828 167.4333 10.180000 76.90000
# margins=TRUE 增加总体均值:
acast(data = aqm, formula = month ~ variable, fun.aggregate = mean, margins = TRUE)
##          ozone  solar.r      wind     temp    (all)
## 5     23.61538 181.2963 11.622581 65.54839 68.70696
## 6     29.44444 190.1667 10.266667 79.10000 87.38384
## 7     59.11538 216.4839  8.941935 83.90323 93.49748
## 8     59.96154 171.8571  8.793548 83.96774 79.71207
## 9     31.44828 167.4333 10.180000 76.90000 71.82689
## (all) 42.12931 185.9315  9.957516 77.88235 80.05722
acast(aqm, month ~ variable, mean, margins = "month")
##          ozone  solar.r      wind     temp
## 5     23.61538 181.2963 11.622581 65.54839
## 6     29.44444 190.1667 10.266667 79.10000
## 7     59.11538 216.4839  8.941935 83.90323
## 8     59.96154 171.8571  8.793548 83.96774
## 9     31.44828 167.4333 10.180000 76.90000
## (all) 42.12931 185.9315  9.957516 77.88235
acast(aqm, month ~ variable, mean, margins = "variable")
##      ozone  solar.r      wind     temp    (all)
## 5 23.61538 181.2963 11.622581 65.54839 68.70696
## 6 29.44444 190.1667 10.266667 79.10000 87.38384
## 7 59.11538 216.4839  8.941935 83.90323 93.49748
## 8 59.96154 171.8571  8.793548 83.96774 79.71207
## 9 31.44828 167.4333 10.180000 76.90000 71.82689
# dcast输出的数据只能是数据框,二维的,month作为数据框的一列,而不是行名称。
dcast(data = aqm, formula = month ~ variable, fun.aggregate = mean, margins = c("month", 
    "variable"))
##   month    ozone  solar.r      wind     temp    (all)
## 1     5 23.61538 181.2963 11.622581 65.54839 68.70696
## 2     6 29.44444 190.1667 10.266667 79.10000 87.38384
## 3     7 59.11538 216.4839  8.941935 83.90323 93.49748
## 4     8 59.96154 171.8571  8.793548 83.96774 79.71207
## 5     9 31.44828 167.4333 10.180000 76.90000 71.82689
## 6 (all) 42.12931 185.9315  9.957516 77.88235 80.05722
dcast(data = aqm, formula = month ~ variable, fun.aggregate = mean, value.var = "value", 
    margins = TRUE)
##   month    ozone  solar.r      wind     temp    (all)
## 1     5 23.61538 181.2963 11.622581 65.54839 68.70696
## 2     6 29.44444 190.1667 10.266667 79.10000 87.38384
## 3     7 59.11538 216.4839  8.941935 83.90323 93.49748
## 4     8 59.96154 171.8571  8.793548 83.96774 79.71207
## 5     9 31.44828 167.4333 10.180000 76.90000 71.82689
## 6 (all) 42.12931 185.9315  9.957516 77.88235 80.05722
library(plyr)  #加载plyr包,为了使用'.'
# subset=.()实现对结果数据的筛选
acast(aqm, variable ~ month, mean, subset = .(variable == "ozone"))
##              5        6        7        8        9
## ozone 23.61538 29.44444 59.11538 59.96154 31.44828
acast(aqm, variable ~ month, mean, subset = .(month == c(5, 9)))
##                 5         9
## ozone    26.38462  32.06667
## solar.r 203.71429 158.33333
## wind     11.38125  10.42667
## temp     65.73333  77.06667
acast(aqm, variable ~ month, mean, subset = .(variable == "ozone", month == 
    c(5, 9)))
##              5        9
## ozone 26.38462 32.06667
dcast(aqm, variable ~ month, mean, subset = .(variable == "ozone"))
##   variable        5        6        7        8        9
## 1    ozone 23.61538 29.44444 59.11538 59.96154 31.44828
names(ChickWeight) <- tolower(names(ChickWeight))
chick_m <- melt(ChickWeight, id = 2:4, na.rm = TRUE)
head(chick_m)
##   time chick diet variable value
## 1    0     1    1   weight    42
## 2    2     1    1   weight    51
## 3    4     1    1   weight    59
## 4    6     1    1   weight    64
## 5    8     1    1   weight    76
## 6   10     1    1   weight    93
str(chick_m)
## 'data.frame':    578 obs. of  5 variables:
##  $ time    : num  0 2 4 6 8 10 12 14 16 18 ...
##  $ chick   : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ...
##  $ diet    : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
##  $ variable: Factor w/ 1 level "weight": 1 1 1 1 1 1 1 1 1 1 ...
##  $ value   : num  42 51 59 64 76 93 106 125 149 171 ...
dcast(chick_m, time ~ variable, mean)
##    time    weight
## 1     0  41.06000
## 2     2  49.22000
## 3     4  59.95918
## 4     6  74.30612
## 5     8  91.24490
## 6    10 107.83673
## 7    12 129.24490
## 8    14 143.81250
## 9    16 168.08511
## 10   18 190.19149
## 11   20 209.71739
## 12   21 218.68889
dcast(chick_m, diet ~ variable, mean)
##   diet   weight
## 1    1 102.6455
## 2    2 122.6167
## 3    3 142.9500
## 4    4 135.2627
acast(chick_m, diet ~ time, mean)
##      0     2        4        6         8        10       12       14
## 1 41.4 47.25 56.47368 66.78947  79.68421  93.05263 108.5263 123.3889
## 2 40.7 49.40 59.80000 75.40000  91.70000 108.50000 131.3000 141.9000
## 3 40.8 50.40 62.20000 77.90000  98.40000 117.10000 144.4000 164.5000
## 4 41.0 51.80 64.50000 83.90000 105.60000 126.00000 151.4000 161.8000
##         16       18       20       21
## 1 144.6471 158.9412 170.4118 177.7500
## 2 164.7000 187.7000 205.6000 214.7000
## 3 197.4000 233.1000 258.9000 270.3000
## 4 182.0000 202.9000 233.8889 238.5556
acast(chick_m, time ~ diet, length)
##     1  2  3  4
## 0  20 10 10 10
## 2  20 10 10 10
## 4  19 10 10 10
## 6  19 10 10 10
## 8  19 10 10 10
## 10 19 10 10 10
## 12 19 10 10 10
## 14 18 10 10 10
## 16 17 10 10 10
## 18 17 10 10 10
## 20 17 10 10  9
## 21 16 10 10  9
acast(chick_m, chick ~ time, mean, subset = .(time < 10 & chick < 20))
##     0  2   4   6   8
## 18 39 35 NaN NaN NaN
## 16 41 45  49  51  57
## 15 41 49  56  64  68
## 13 41 48  53  60  65
## 9  42 51  59  68  85
acast(chick_m, chick ~ time, length, subset = .(time < 10 & chick < 20))
##    0 2 4 6 8
## 18 1 1 0 0 0
## 16 1 1 1 1 1
## 15 1 1 1 1 1
## 13 1 1 1 1 1
## 9  1 1 1 1 1
dcast(chick_m, chick ~ time, length, subset = .(time < 10 & chick < 20))
##   chick 0 2 4 6 8
## 1    18 1 1 0 0 0
## 2    16 1 1 1 1 1
## 3    15 1 1 1 1 1
## 4    13 1 1 1 1 1
## 5     9 1 1 1 1 1
acast(chick_m, time ~ diet, length)
##     1  2  3  4
## 0  20 10 10 10
## 2  20 10 10 10
## 4  19 10 10 10
## 6  19 10 10 10
## 8  19 10 10 10
## 10 19 10 10 10
## 12 19 10 10 10
## 14 18 10 10 10
## 16 17 10 10 10
## 18 17 10 10 10
## 20 17 10 10  9
## 21 16 10 10  9
dcast(chick_m, diet + chick ~ time)
##    diet chick  0  2  4  6   8  10  12  14  16  18  20  21
## 1     1    18 39 35 NA NA  NA  NA  NA  NA  NA  NA  NA  NA
## 2     1    16 41 45 49 51  57  51  54  NA  NA  NA  NA  NA
## 3     1    15 41 49 56 64  68  68  67  68  NA  NA  NA  NA
## 4     1    13 41 48 53 60  65  67  71  70  71  81  91  96
## 5     1     9 42 51 59 68  85  96  90  92  93 100 100  98
## 6     1    20 41 47 54 58  65  73  77  89  98 107 115 117
## 7     1    10 41 44 52 63  74  81  89  96 101 112 120 124
## 8     1     8 42 50 61 71  84  93 110 116 126 134 125  NA
## 9     1    17 42 51 61 72  83  89  98 103 113 123 133 142
## 10    1    19 43 48 55 62  65  71  82  88 106 120 144 157
## 11    1     4 42 49 56 67  74  87 102 108 136 154 160 157
## 12    1     6 41 49 59 74  97 124 141 148 155 160 160 157
## 13    1    11 43 51 63 84 112 139 168 177 182 184 181 175
## 14    1     3 43 39 55 67  84  99 115 138 163 187 198 202
## 15    1     1 42 51 59 64  76  93 106 125 149 171 199 205
## 16    1    12 41 49 56 62  72  88 119 135 162 185 195 205
## 17    1     2 40 49 58 72  84 103 122 138 162 187 209 215
## 18    1     5 41 42 48 60  79 106 141 164 197 199 220 223
## 19    1    14 41 49 62 79 101 128 164 192 227 248 259 266
## 20    1     7 41 49 57 71  89 112 146 174 218 250 288 305
## 21    2    24 42 52 58 74  66  68  70  71  72  72  76  74
## 22    2    30 42 48 59 72  85  98 115 122 143 151 157 150
## 23    2    22 41 55 64 77  90  95 108 111 131 148 164 167
## 24    2    23 43 52 61 73  90 103 127 135 145 163 170 175
## 25    2    27 39 46 58 73  87 100 115 123 144 163 185 192
## 26    2    28 39 46 58 73  92 114 145 156 184 207 212 233
## 27    2    26 42 48 57 74  93 114 136 147 169 205 236 251
## 28    2    25 40 49 62 78 102 124 146 164 197 231 259 265
## 29    2    29 39 48 59 74  87 106 134 150 187 230 279 309
## 30    2    21 40 50 62 86 125 163 217 240 275 307 318 331
## 31    3    33 39 50 63 77  96 111 137 144 151 146 156 147
## 32    3    37 41 48 56 68  80  83 103 112 135 157 169 178
## 33    3    36 39 48 61 76  98 116 145 166 198 227 225 220
## 34    3    31 42 53 62 73  85 102 123 138 170 204 235 256
## 35    3    39 42 50 61 78  89 109 130 146 170 214 250 272
## 36    3    38 41 49 61 74  98 109 128 154 192 232 280 290
## 37    3    32 41 49 65 82 107 129 159 179 221 263 291 305
## 38    3    40 41 55 66 79 101 120 154 182 215 262 295 321
## 39    3    34 41 49 63 85 107 134 164 186 235 294 327 341
## 40    3    35 41 53 64 87 123 158 201 238 287 332 361 373
## 41    4    44 42 51 65 86 103 118 127 138 145 146  NA  NA
## 42    4    45 41 50 61 78  98 117 135 141 147 174 197 196
## 43    4    43 42 55 69 96 131 157 184 188 197 198 199 200
## 44    4    41 42 51 66 85 103 124 155 153 175 184 199 204
## 45    4    47 41 53 66 79 100 123 148 157 168 185 210 205
## 46    4    49 40 53 64 85 108 128 152 166 184 203 233 237
## 47    4    46 40 52 62 82 101 120 144 156 173 210 231 238
## 48    4    50 41 54 67 84 105 122 155 175 205 234 264 264
## 49    4    42 42 49 63 84 103 126 160 174 204 234 269 281
## 50    4    48 39 50 62 80 104 125 154 170 222 261 303 322

2、colsplit 将一个向量分列

colsplit(string, pattern, names) - string: character vector or factor to split up - pattern: regular expression to split on - names: names for output columns

x <- c("a_1", "a_2", "b_2", "c_3")
vars <- colsplit(x, "_", c("trt", "time"))
vars
##   trt time
## 1   a    1
## 2   a    2
## 3   b    2
## 4   c    3
str(vars)
## 'data.frame':    4 obs. of  2 variables:
##  $ trt : chr  "a" "a" "b" "c"
##  $ time: int  1 2 2 3
colsplit(c("a_1_1", "a_2_2", "b_2_2", "c_3"), "_", c("trt", "time", "time2"))
##   trt time time2
## 1   a    1     1
## 2   a    2     2
## 3   b    2     2
## 4   c    3    NA

3、melt 将宽数据转换成长数据

melt(data, …, na.rm = FALSE, value.name = “value”)
  • data: 数据集
  • na.rm:是否移除缺失数据
  • value.name: 存储值的变量名

(1)数据集为数组时:

melt(data, varnames = names(dimnames(data)), …,na.rm = FALSE, as.is = FALSE, value.name = “value”)

a <- array(c(1:23, NA), c(2, 3, 4))
a
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    9   11
## [2,]    8   10   12
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   13   15   17
## [2,]   14   16   18
## 
## , , 4
## 
##      [,1] [,2] [,3]
## [1,]   19   21   23
## [2,]   20   22   NA
melt(a)
##    Var1 Var2 Var3 value
## 1     1    1    1     1
## 2     2    1    1     2
## 3     1    2    1     3
## 4     2    2    1     4
## 5     1    3    1     5
## 6     2    3    1     6
## 7     1    1    2     7
## 8     2    1    2     8
## 9     1    2    2     9
## 10    2    2    2    10
## 11    1    3    2    11
## 12    2    3    2    12
## 13    1    1    3    13
## 14    2    1    3    14
## 15    1    2    3    15
## 16    2    2    3    16
## 17    1    3    3    17
## 18    2    3    3    18
## 19    1    1    4    19
## 20    2    1    4    20
## 21    1    2    4    21
## 22    2    2    4    22
## 23    1    3    4    23
## 24    2    3    4    NA
melt(a, na.rm = TRUE)
##    Var1 Var2 Var3 value
## 1     1    1    1     1
## 2     2    1    1     2
## 3     1    2    1     3
## 4     2    2    1     4
## 5     1    3    1     5
## 6     2    3    1     6
## 7     1    1    2     7
## 8     2    1    2     8
## 9     1    2    2     9
## 10    2    2    2    10
## 11    1    3    2    11
## 12    2    3    2    12
## 13    1    1    3    13
## 14    2    1    3    14
## 15    1    2    3    15
## 16    2    2    3    16
## 17    1    3    3    17
## 18    2    3    3    18
## 19    1    1    4    19
## 20    2    1    4    20
## 21    1    2    4    21
## 22    2    2    4    22
## 23    1    3    4    23
melt(a, varnames = c("X", "Y", "Z"))
##    X Y Z value
## 1  1 1 1     1
## 2  2 1 1     2
## 3  1 2 1     3
## 4  2 2 1     4
## 5  1 3 1     5
## 6  2 3 1     6
## 7  1 1 2     7
## 8  2 1 2     8
## 9  1 2 2     9
## 10 2 2 2    10
## 11 1 3 2    11
## 12 2 3 2    12
## 13 1 1 3    13
## 14 2 1 3    14
## 15 1 2 3    15
## 16 2 2 3    16
## 17 1 3 3    17
## 18 2 3 3    18
## 19 1 1 4    19
## 20 2 1 4    20
## 21 1 2 4    21
## 22 2 2 4    22
## 23 1 3 4    23
## 24 2 3 4    NA

(2)数据集为数据框时:

melt(data, id.vars, measure.vars,variable.name = “variable”, …, na.rm = FALSE, value.name = “value”,factorsAsStrings = TRUE)

names(airquality) <- tolower(names(airquality))
head(airquality)
##   ozone solar.r wind temp month day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6
str(airquality)
## 'data.frame':    153 obs. of  6 variables:
##  $ ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
##  $ solar.r: int  190 118 149 313 NA NA 299 99 19 194 ...
##  $ wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
##  $ temp   : int  67 72 74 62 56 66 65 59 61 69 ...
##  $ month  : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ day    : int  1 2 3 4 5 6 7 8 9 10 ...
head(melt(data = airquality, id.vars = c("month", "day")))
##   month day variable value
## 1     5   1    ozone    41
## 2     5   2    ozone    36
## 3     5   3    ozone    12
## 4     5   4    ozone    18
## 5     5   5    ozone    NA
## 6     5   6    ozone    28
head(melt(data = airquality, id.vars = c("month", "day"), measure.vars = c("ozone", 
    "temp"), variable.name = "vname", value.name = "valuename", na.rm = TRUE))
##   month day vname valuename
## 1     5   1 ozone        41
## 2     5   2 ozone        36
## 3     5   3 ozone        12
## 4     5   4 ozone        18
## 6     5   6 ozone        28
## 7     5   7 ozone        23
str(french_fries)  #数据集
## 'data.frame':    696 obs. of  9 variables:
##  $ time     : Factor w/ 10 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ treatment: Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
##  $ subject  : Factor w/ 12 levels "3","10","15",..: 1 1 2 2 3 3 4 4 5 5 ...
##  $ rep      : num  1 2 1 2 1 2 1 2 1 2 ...
##  $ potato   : num  2.9 14 11 9.9 1.2 8.8 9 8.2 7 13 ...
##  $ buttery  : num  0 0 6.4 5.9 0.1 3 2.6 4.4 3.2 0 ...
##  $ grassy   : num  0 0 0 2.9 0 3.6 0.4 0.3 0 3.1 ...
##  $ rancid   : num  0 1.1 0 2.2 1.1 1.5 0.1 1.4 4.9 4.3 ...
##  $ painty   : num  5.5 0 0 0 5.1 2.3 0.2 4 3.2 10.3 ...
str(smiths)  #数据集
## 'data.frame':    2 obs. of  5 variables:
##  $ subject: Factor w/ 2 levels "John Smith","Mary Smith": 1 2
##  $ time   : int  1 1
##  $ age    : num  33 NA
##  $ weight : num  90 NA
##  $ height : num  1.87 1.54
str(tips)  #数据集
## 'data.frame':    244 obs. of  7 variables:
##  $ total_bill: num  17 10.3 21 23.7 24.6 ...
##  $ tip       : num  1.01 1.66 3.5 3.31 3.61 4.71 2 3.12 1.96 3.23 ...
##  $ sex       : Factor w/ 2 levels "Female","Male": 1 2 2 2 1 2 2 2 2 2 ...
##  $ smoker    : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ day       : Factor w/ 4 levels "Fri","Sat","Sun",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ time      : Factor w/ 2 levels "Dinner","Lunch": 1 1 1 1 1 1 1 1 1 1 ...
##  $ size      : int  2 3 3 2 4 4 2 4 2 2 ...