根据长列表将列添加到数据框中,而另一列中的值太慢

时间:2020-06-21 18:41:16

标签: r list apply mutate

我正在使用apply()和mutate将新列添加到数据框。有用。不幸的是,它非常慢。我有2400万行,并且要根据很长的值(58个项目)添加列。用较小的列表可以忍受。不再。 这是我的例子

large_df <-data.frame(A=(1:4),
                   B= c('a','b','c','d'),
                  C= c('e','f','g','h')) 
long_list = c('e','f','g')

large_df =mutate (large_df, new_C = apply(large_df[,2:3], 1, 
                 function(r) any(r %in% long_list)))


新列(new_C)将显示True或False。它可以工作,但我正在寻找一种快速的替代方法。

非常感谢。 Serhiy

奖金问:我不能只选择一列具有apply()所需范围的列。为什么?

1 个答案:

答案 0 :(得分:0)

使用lapply尝试以下一种方法:

large_df$new_c <- Reduce(`|`, lapply(large_df[, 2:3], `%in%`, long_list))

sapply

large_df$new_c <- rowSums(sapply(large_df[, 2:3], `%in%`, long_list)) > 0

两者均返回:

large_df
#  A B C new_c
#1 1 a e  TRUE
#2 2 b f  TRUE
#3 3 c g  TRUE
#4 4 d h FALSE