R:将数据框的一列与列表中的每个元素进行比较

时间:2018-11-20 14:52:30

标签: r list dataframe comparison

请问谁能帮助我? 我有一个包含各种数据的数据框(df),我有一个列表(lst),其中包含来自df的唯一值。 例如:

[enter image description here]

我需要将df $ Col1中的每个元素与lst $ Col1的第一个元素进行比较,然后与第二个元素,第三个元素进行比较。 然后对第二和第三列执行相同的步骤。 如果比较结果为True,则返回1,否则返回0。

1 个答案:

答案 0 :(得分:0)

如果您对矩阵/ data.frame的每个元素说apply,则可以使用MARGIN = c(1,2)来实现。

df <- data.frame(col1 = c(3,2,9,7,7,1,9), 
             col2 = c(3,6,12,7,10,4,6),
             col3 = c(7,3,10,2,2,2,10))

List <- list(col1 = c(1,2,3,7,9), 
         col2 = c(3,4,6,7,10,12), 
         col3 = c(2,3,7,10))

apply(df, MARGIN = c(1,2), function(x) x %in% List[[1]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[2]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[3]])

如果您想将其组合起来,可以将其放在一个lappy函数中,该函数将一个函数应用于列表的每个元素:

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) y %in% x))

您希望将1/0作为返回值,而不是TRUE / FALSE。只需对您的逻辑矢量使用as.numeric()

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) as.numeric(y %in% x)))