我有两个数据框(其中一个包含列表,每个数据框包含不同数量的元素):
df_1 <- as.data.frame(matrix(c(2, 5, 6, 7), 2, 2))
list_1 <- list(list('joe'), list('mia'), list(1,2,3), list(1,3), list(2,5,4,8), list(4,5,7,8))
df_2 <- as.data.frame(matrix(list_1, 2, 3))
我想沿着 df_2 的第二列使用 df_1[1,1] 和 df_1[2,1] 进行搜索,并沿着 df_2 的第三列使用 df_1[1,2] 和 df_1[2,2] 进行搜索,如下:
A1 <- grepl(df_1[1,1],unlist(df_2[,2]))
A2 <- grepl(df_1[2,1],unlist(df_2[,2]))
A3 <- grepl(df_1[1,2],unlist(df_2[,3]))
A4 <- grepl(df_1[2,2],unlist(df_2[,3]))
(在这种情况下,如果我不使用“取消列出”,它会很好地工作,但在我的真实数据框中,只有当我取消列出第二个数据帧的列时,它才有效(好吧,不是真的))。结果如下:
A1 假是真的假假假假
A2 假假假假假假
A3 假假假假假假假假假假
A4 假假假假假假假假真假
问题是我想对A1、A2、A3和A4进行cbind,所以它们的最终长度应该是2,正好是df_2的行数。最终期望的结果是一个 2x2(测试了 2 行 df_2 和 2 列)数据框,如下所示:
(F T F F F)(F F F F F F F F)
(F F F F F)(F F F F F F F T F)
我尝试了不同的修改,但无法解决该问题。你们中有人可以帮助我吗?预先感谢。
lapply
嵌套在 mapply
:
m <- mapply(\(i) lapply(df_1[,i], \(x) grepl(x, unlist(df_2[,i + 1]))), 1:2)
m
#> [,1] [,2]
#> [1,] logical,5 logical,8
#> [2,] logical,5 logical,8
c(m)
#> [[1]]
#> [1] FALSE TRUE FALSE FALSE FALSE
#>
#> [[2]]
#> [1] FALSE FALSE FALSE FALSE FALSE
#>
#> [[3]]
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#>
#> [[4]]
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE