假设有以下数据集:
+---------------+-----------+---------------------+ | flightCarrier | saleTotal | daysBeforeDeparture | +---------------+-----------+---------------------+ | KL | 477.99 | 0 | | AF | 457.99 | 0 | | SQ | 556.31 | 0 | +---------------+-----------+---------------------+
我想要做的是:
1. 将列中的一个值与同一列中的所有其他值进行比较。 2. 如果saleTotal(1)小于saleTotal(2)和saleTotal(3)的值,则怎么办? 3. 如果是,差多少?saleTotal(3)/saleTotal(1)
工单如下:
- 477.99 < 457.99 (false) - 477.99 < 556.31 (true) -> (556.31/477.99)-1=1.16 (增加了16%) - 457.99 < 477.99 (true) -> ..... - 457.99 < 556.31 (true) -> ..... - 556.31 < 477.99 (false) - 556.31 < 457.99 (false)
我尝试过的方法:
这没有成功,输出“logical(0)”,所以我猜没有结果。 我尝试了很多方法,使用lapply、mapply,但似乎都是比较静态数字而不是前一行。
从apply中我了解到的是,每个X都有它正在“迭代”的行。这就是为什么我尝试将X与包含所有saleTotal值的整个向量A进行比较。因此,逐个迭代。
期望输出 业务输出:“价格比其他XY个价格便宜”
我想这可能是避免大矩阵并尽可能保持内存低的最佳方法) 是否可能直接“nrow()”结果,而不是先创建矩阵/列表?
任何想法如何做到这一点?对于性能,我有100000+行?
编辑:预期输出(一种方式)
+---------------+-----------+---------------------+ | flightCarrier | saleTotal | daysBeforeDeparture | +---------------+-----------+---------------------+ | KL | 477.99 | 0 | | AF | 457.99 | 0 | | SQ | 556.31 | 0 | +---------------+-----------+---------------------+
我想要做的是:
1. 将列中的一个值与同一列中的所有其他值进行比较。 2. 如果saleTotal(1)小于saleTotal(2)和saleTotal(3)的值,则怎么办? 3. 如果是,差多少?saleTotal(3)/saleTotal(1)
工单如下:
- 477.99 < 457.99 (false) - 477.99 < 556.31 (true) -> (556.31/477.99)-1=1.16 (增加了16%) - 457.99 < 477.99 (true) -> ..... - 457.99 < 556.31 (true) -> ..... - 556.31 < 477.99 (false) - 556.31 < 457.99 (false)
我尝试过的方法:
cal <- apply(df_matrix[1:2,2], 1, function(x) {
A <- x
x <- x[-1]
ifelse(x>A, 1, ifelse(x<A, 0, NA))
})
cal
这没有成功,输出“logical(0)”,所以我猜没有结果。 我尝试了很多方法,使用lapply、mapply,但似乎都是比较静态数字而不是前一行。
从apply中我了解到的是,每个X都有它正在“迭代”的行。这就是为什么我尝试将X与包含所有saleTotal值的整个向量A进行比较。因此,逐个迭代。
期望输出 业务输出:“价格比其他XY个价格便宜”
我想这可能是避免大矩阵并尽可能保持内存低的最佳方法) 是否可能直接“nrow()”结果,而不是先创建矩阵/列表?
任何想法如何做到这一点?对于性能,我有100000+行?
编辑:预期输出(一种方式)
outer(df$saleTotal, df$saleTotal, "/")
,值大于1表示增长,小于1表示下降,矩阵的对角线是所有的1,因为它将每个值与其自身进行比较。 - talat<
比较会发生什么?您的“工作订单”表明需要一个简单的循环,例如lapply(seq_along(x), function(i) x[-i][x[[i]] < x[-i]] / x[[i]])
。 - alexis_lazfindInterval
函数;length(x) - findInterval(x, sort(x))
应该足够高效。 - alexis_lazfindInterval
会更快);p)。 - Tensibai