r - 简化基于另一个数据帧中的值对一个数据帧执行操作的函数
问题描述
我有两个数据框dat1
和dat2
:
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)
我想在函数中添加一行,将正确value
的 from分配dat2
给一个新的 object v
,这样我就不必每次都输入该id
函数value
。我无法弄清楚如何从本质上说:“如果我告诉你我想为 执行此操作,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)
`
解决方案
我相信你想要
v <- dat2$value[dat2$id == id]
getk("a")
但请注意,如果您使用因为a
不是对象,它只会在您的函数中起作用。
推荐阅读
- angular - 为什么我会收到“src/app/component.service.ts(9,29) 中的错误:错误 TS2304:找不到名称 'Http'。” 在角度?
- sql - 在 SQL 中执行语句后所有数据为 NULL
- xcode - 从 firebase 调用子数据
- javascript - 用纯 JS 重新创建 jQuery `has()`。不适用于访问过的链接
- python - Scrapy复制结果
- bash - 颤振:在 Jenkins 中运行 shell 脚本时找不到命令
- azure-devops - Azure DevOps 提取文件任务不保留层次结构
- java - 如何将我的号码分成多行?
- typescript - jsdoc typedef中的动态键
- python - 跨模块访问动态变化的变量