如何计算依赖于使用每行变量值的函数的列?

时间:2015-07-29 13:16:41

标签: r

这是基于我想做的mtcars的模型:

  • 计算一列,用于计算较少的汽车数量 相同档位的当前行的位移(disp
    类别(am
  • 预期列是我想要的值
  • try1findInterval函数的一次尝试,问题是我无法计算依赖于类别的子集(am

我已经尝试过使用*apply的解决方案,但是我无法在某种程度上永远不能使这个函数只在依赖于处理行的变量值的子集上工作(希望这是有意义的)。

x = mtcars[1:6,c("disp","am")]
# expected values are the number of cars that have less disp while having the same am
x$expected = c(1,1,0,1,2,0) 
#this ordered table is for findInterval
a = x[order(x$disp),] 
a
# I use the findInterval function to get the number of values and I try subsetting the call
# -0.1 is to deal with the closed intervalq 
x$try1 = findInterval(x$disp-0.1, a$disp[a$am==x$am])
x
# try1 values are not computed depending on the subsetting of a

任何解决方案都可以;使用findInterval函数不是强制性的。

我宁愿有一个更通用的解决方案,通过调用一个从当前行获取值来计算预期值的函数来计算列值。

2 个答案:

答案 0 :(得分:4)

正如@dimitris_ps所指出的,之前的解决方案忽略了重复的计数。以下提供了补救措施。

library(dplyr)
x %>% 
  group_by(am) %>%
  mutate(expected=findInterval(disp, sort(disp) + 0.0001))

library(data.table)
setDT(x)[, expected:=findInterval(disp, sort(disp) + 0.0001), by=am]

答案 1 :(得分:3)

基于@Khashaa的逻辑,这是我的方法

library(dplyr)
mtcars %>% 
  group_by(am) %>%
  mutate(expected=match(disp, sort(disp))-1)