我想使用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