首页 > 解决方案 > 简化基于另一个数据帧中的值对一个数据帧执行操作的函数

问题描述

我有两个数据框dat1dat2

dat1 <- data.frame(id = rep(c("a","b","c"), each =100),
                   dist = rep(1:100, times = 3),
                   var1 = rnorm(300),
                   var2 = rnorm(300))
dat2 <- data.frame(id = c("a","b","c"),
                   value = c(42,56,39))

中的valuedat2包含我想在其中子集化的值的索引dat1。我编写了以下函数getv来执行此子集并使用该值执行此操作:

getk <- 
  function(id, value){
    x <- dplyr::filter(dat1,  id == id)
    x <- x[1:value, ]
    k = 10*(value^(2/9))
    k = ceiling(k)
    k
  }
getk(a,42)

我想在函数中添加一行,将正确value的 from分配dat2给一个新的 object v,这样我就不必每次都输入该id函数value。我无法弄清楚如何从本质上说:“如果我告诉你我想为 执行此操作,a请将相应的数字分配给对象”dat2$valuefilter(dat2, id==a)v

换句话说,我的功能将变成接近这个的东西:

getk <- 
  function(id){
    x <- dplyr::filter(dat1,  id == id)
    v <- #the value in dat2
    x <- x[1:v, ]
    k = 10*(v^(2/9))
    k = ceiling(k)
    k
  }
#after which I could just do this and get the same answer as above:
getk(a)
`

标签: rfunctiondplyr

解决方案


我相信你想要

v <- dat2$value[dat2$id == id]

getk("a")但请注意,如果您使用因为a不是对象,它只会在您的函数中起作用。


推荐阅读