我使用summaryBy函数创建了一个data.frame - y< - summaryBy ....
在运行订单功能进行排序时,我收到错误。感谢帮助!
> str(y)
'data.frame': 77 obs. of 8 variables:
$ a : Factor w/ 66 levels ...
$ b: Factor w/ 16 levels ...
$ totalPaid.m : num NA NA NA NA NA ...
$ totalPaid.s : num NA NA NA NA NA ...
$ totalPaid.c : num 1357 1 1 1 1 ...
$ c.m : num NA 0 1.17 0 21.43 ...
$ c.s : num NA NA NA NA NA ...
$ c.c : num 1357 1 1 1 1 ...
> order(y$totalPaid.m)
[1] 66 68 21 24 12 71 51 60 46 39 74 76 9 44 63 77 26 75 58 73 47 57 65 30 11 72 42 15 18 70 48 27 35 16 32 61 29 43 55 33 40 59 23 13 67 56 31 19 45 50 25 38 52 62 37 36 10 14
[59] 22 69 28 49 54 53 64 1 2 3 4 5 6 7 8 17 20 34 41
> y[order(y$totalPaid.m)]
Error in `[.data.frame`(y, order(y$totalPaid.m)) :
undefined columns selected
答案 0 :(得分:5)
正如Henrik在你想要的评论中所说的那样
y[order(y$totalPaid.m), ]
R数据帧可以由列和行索引。您可以通过放置逗号来指定是按列还是按行编制索引。以下是一些例子:
a <- rnorm(10,10,1000)
b <- rnorm(10,-10,10)
c <- rnorm(10,100,5)
dat <- data.frame(a,b,c)
dat
a b c
1 18.88251 4.1280241 100.61576
2 716.73542 -2.2301466 97.93047
3 -1235.55314 -11.5865178 98.20612
4 -320.97346 -2.0478518 105.74852
5 862.63454 -14.6095826 97.58298
6 361.91272 -0.9127309 91.44080
7 -616.91762 -9.0358181 98.78145
8 -411.13981 -22.6804911 95.42187
9 299.97119 -14.4090133 97.60401
10 -966.91953 -15.3730726 100.68891
您可能已经猜到dat[1, 1]
将向左上角的单元格显示,dat[10, 3]
将为您提供右下方的单元格,dat[5, 2]
将为您提供中心单元格。
dat[1, 1]
# [1] 18.88251
dat[10, 3]
# [1] 100.6889
dat[5, 2]
# [1] -14.60958
您还可以通过将其中一个位置留空来选择data.frame的整个行或列。例如,dat[, 1]
为您提供data.frame的第一列,而dat[1, ]
为您提供第一行。
dat[ ,1]
# [1] 18.88251 716.73542 -1235.55314 -320.97346 862.63454 361.91272
# [7] -616.91762 -411.13981 299.97119 -966.91953
dat[1, ]
# a b c
# 1 18.88251 4.128024 100.6158
当您将基于行或列操作的函数应用于data.frame时,指定您选择列或行(由逗号的位置指示)非常重要。
min(dat[,1])
# [1] -1235.553
min(dat[1,])
# [1] 4.128024
你想要的原因
y[order(y$totalPaid.m), ]
而不是
y[, order(y$totalPaid.m)]
是order(dat$col)
按从最大到最小的顺序为您提供行索引(数字)。例如:
order(dat$b)
# [1] 8 10 5 9 3 7 2 4 6 1
这意味着您的数据框将根据订单函数给出的行索引进行重新排序。 order函数对您作为参数赋予函数的列进行操作。
我希望这有助于你理解。