请问谁能帮助我? 我有一个包含各种数据的数据框(df),我有一个列表(lst),其中包含来自df的唯一值。 例如:
[
我需要将df $ Col1中的每个元素与lst $ Col1的第一个元素进行比较,然后与第二个元素,第三个元素进行比较。 然后对第二和第三列执行相同的步骤。 如果比较结果为True,则返回1,否则返回0。
答案 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)))