我正在使用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()所需范围的列。为什么?
答案 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