简化一个函数,该函数根据另一个数据帧中的值对一个数据帧执行操作。

问题描述 投票:0回答:1

我有两个数据帧 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))

value 栏目 dat2 中包含了我想通过子集的值的索引。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)

我想在函数中添加一行,将正确的... valuedat2 变成一个新的对象 v,这样我就不用再给函数输入 idvalue 每次都是如此。我不知道如何说本质上, "如果我告诉你,我想这样做,为了 a,分配号码从 dat2$value 搭配 filter(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)
`
r function dplyr
1个回答
1
投票

我相信你想

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

但请注意,只有当你使用了 getk("a") 自从 a 不是一个对象。

© www.soinside.com 2019 - 2024. All rights reserved.