我是R和Stackoverflow的新手,我需要一个助手来分类和提取我创建的数据框中的信息。我需要提取哪些IATA和NAME收到的佣金最多。结果应该打印:3301,你支付,12。我可以将每个IATA分配,但这是一个漫长的过程。 R中最好的功能是对所有这些信息进行排序并打印出这些信息。
IATA NAME TICKET_NUM PAX FARE TAX COMM NET
3300 pay more 700 john cohen 10 1.1 2 8
3300 pay more 701 james levy 11 1.2 2 9
3300 pay more 702 jonathan arbel 12 1.2 3 9
3300 pay more 703 gil matan 9 1.0 2 7
3301 you pay 704 ron natan 19 2.0 6 9
3301 you pay 705 don horvitz 18 2.0 6 9
3302 pay by ticket 706 lutter kaplan 9 1.2 0 9
3303 enjoy 707 lutter omega 12 1.2 0 12
3303 enjoy 708 graig daniel 14 1.3 1 13
3303 enjoy 730 orly rotenberg 15 1.0 1 14
3303 enjoy 731 yohan bach 12 1.0 1 11
答案 0 :(得分:0)
调用该表comm
max_comm <- comm[comm$COMM == max(comm$COMM),]
或者只是排序并查看头部
head(comm[order(-comm$COMM),])
编辑:如果您想先通过IATA求和,请使用data.table
library(data.table)
comm2 <- data.table(comm)
sum_comm <- comm2[, list(COMM_SUM=sum(COMM)), by = c("IATA","NAME")]
data.table
有一个不寻常的语法,您也可以尝试dplyr
,它应该与data.table
现在大致相同
答案 1 :(得分:0)
这似乎返回了您的要求(使用Jeremy的第二部分代码):
comm <- read.table(text = '
IATA NAME TICKET_NUM PAX FARE TAX COMM NET
3300 pay.more 700 john.cohen 10 1.1 2 8
3300 pay.more 701 james.levy 11 1.2 2 9
3300 pay.more 702 jonathan.arbel 12 1.2 3 9
3300 pay.more 703 gil.matan 9 1.0 2 7
3301 you.pay 704 ron.natan 19 2.0 6 9
3301 you.pay 705 don.horvitz 18 2.0 6 9
3302 pay.by.ticket 706 lutter.kaplan 9 1.2 0 9
3303 enjoy 707 lutter.omega 12 1.2 0 12
3303 enjoy 708 graig.daniel 14 1.3 1 13
3303 enjoy 730 orly.rotenberg 15 1.0 1 14
3303 enjoy 731 yohan.bach 12 1.0 1 11
', header=TRUE, stringsAsFactors = FALSE)
comm2 <- with(comm, aggregate(COMM ~ IATA + NAME, FUN = function(x) sum(x, na.rm = TRUE)))
comm2
max_comm <- comm2[comm2$COMM == max(comm2$COMM),]
max_comm
IATA NAME COMM
4 3301 you.pay 12
以下是对第一个陈述的解释:
with
函数标识要使用的数据集(此处为comm
)。函数aggregate
是用于对组执行操作的通用函数。您希望COMM
和IATA
对NAME
进行操作。你写的是:COMM ~ IATA + NAME
。接下来,指定要在COMM
(此处为sum
)上执行的所需功能。您可以使用FUN = function(x) sum(x)
执行此操作。如果COMM
中有任何遗漏的观察结果,我在na.rm = TRUE
函数中添加了sum(x)
。