我想过滤此数据表中,但我想,以滤除列的列表。
#example data
time= c(1, 2, 3, 4)
conditions = list('rain', 'rain', c('rain', 'sleet'), 'rain')
data = data.table(date, conditions)
print(data)
time conditions
1: 1 rain
2: 2 rain
3: 3 rain,sleet
4: 4 rain
正常的命令似乎不工作:
# Data.Table
data[conditions == c('rain', 'sleet')] # Gives error
# dplyr
filter(data,conditions == c('rain', 'sleet')) # Doesn't return desired result
请指教。
我们可以用identical
:
data[sapply(conditions, identical, c('rain', 'sleet')), ]
或tidyverse
:
library(tidyverse)
data %>%
filter(map_lgl(conditions, identical, c('rain', 'sleet')))
输出:
date conditions
1: 3 rain,sleet
您可以使用purrr
包并通过identical
功能。
library(dplyr)
library(purrr)
data %>%
filter(map_lgl(conditions, ~identical(c('rain','sleet'), .)))
> time conditions
> 3 rain, sleet