在这种情况下,如何编写lapply函数



我想使用R中的lapply函数比较两个数据帧之间的同一列,但不知道如何进行。

一个简化的例子是这样的:

我有一个列的列表

col_ls <- c(c1,c2,c3,c4,c5)

以及在df1和df2 之间比较那些列(cx表示下面的列x(的任何函数(例如,交集(

any_function(df1$cx, df2$cx)

我如何编写自己的函数来用lapply解决这个问题?

您可以使用[[通过字符串选择列。

然后可以将比较函数映射到列上,并将数据帧作为参数。

any_function <- function(fieldname, df1, df2) {
df1[[fieldname]] == df2[[fieldname]]
}
lapply(col_ls, any_function, onedf, otherdf)

使用mtcars 的mapply示例

set.seed(1)
col_ls <- c("mpg","cyl","disp")
mapply(
function(x,y){
intersect(x,y)
},
mtcars[col_ls],
mtcars[col_ls]+sample(c(-1,0,1),prod(dim(mtcars[col_ls])),replace=T)
)

导致

$mpg
[1] 22.8 21.4 24.4 10.4 14.7 32.4 27.3 15.8 19.7 15.0
$cyl
[1] 6 4 8
$disp
[1] 108.0 167.6 472.0 120.1 120.3  95.1 351.0 301.0 121.0

最新更新