在一个数据表或数据帧的基于恰好是一个列表中的列的行的滤波

问题描述 投票:1回答:2

我想过滤此数据表中,但我想,以滤除列的列表。

#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

请指教。

r list filter subset
2个回答
2
投票

我们可以用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

1
投票

您可以使用purrr包并通过identical功能。

library(dplyr)    
library(purrr)

data %>%
  filter(map_lgl(conditions, ~identical(c('rain','sleet'), .))) 

> time  conditions
>    3  rain, sleet
© www.soinside.com 2019 - 2024. All rights reserved.