如何对变量求和并提取相关变量以显示在答案中

时间:2014-01-20 07:11:25

标签: r variables sum extract r-factor

我是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

2 个答案:

答案 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是用于对组执行操作的通用函数。您希望COMMIATANAME进行操作。你写的是:COMM ~ IATA + NAME。接下来,指定要在COMM(此处为sum)上执行的所需功能。您可以使用FUN = function(x) sum(x)执行此操作。如果COMM中有任何遗漏的观察结果,我在na.rm = TRUE函数中添加了sum(x)