R:过滤包含列表的数据框

yxyvkwin  于 2023-04-27  发布在  其他
关注(0)|答案(3)|浏览(246)

我有一个这样的 Dataframe :
| 姓名|参数1|
| --------------|--------------|
| 约翰尼|c(11,4,35)|
| 迈克尔|c(1,3,9)|
我想过滤至少有一个值(在向量中)大于10的Parameter 1的数据框
我期待的结果是
| 姓名|参数1|
| --------------|--------------|
| 约翰尼|c(11,4,35)|
有什么建议吗?
谢谢你

voj3qocg

voj3qocg1#

你可以试试

> subset(df, sapply(Parameter1, max) > 10)
   Name Parameter1
1 Johny  11, 4, 35
r9f1avp5

r9f1avp52#

一种方法可能是这样的:
在这里,我们使用tidyr::separate_rows将列表中的所有值放在一行中。然后我们使用readr::parse_number()检查条件并过滤〉10,最后我们使用toString获得所需的输出:

library(dplyr)
library(tidyr)
library(readr)

df %>% 
  separate_rows(Parameter1, sep = ",") %>% 
  filter(any(parse_number(Parameter1) >10), .by = Name) %>% 
  summarise(Parameter1 = toString(Parameter1), .by=Name)

 Name  Parameter1  
  <chr> <chr>       
1 Johny c(11, 4, 35)

数据:

df <- structure(list(Hour = 0:5, Giraffe = c(1L, 0L, 1L, 1L, 0L, 0L
), Elephant = c(1L, 1L, 0L, 1L, 1L, 0L), Lion = c(0L, 1L, 0L, 
0L, 0L, 1L)), class = "data.frame", row.names = c(NA, -6L))
vwoqyblh

vwoqyblh3#

我认为你可以使用**dplyr::filter()函数,结合any()purrr::map_lgl()**函数。下面是一个可能的解决方案:

# Load the dplyr package
library(dplyr)
library(purrr)

# Create the example data frame
data <- data.frame(
 Name = c("Johny", "Michael"),
 Parameter1 = I(list(c(11, 4, 35), c(1, 3, 9)))
)

# Filter the data frame
filtered_data <- data %>%
 filter(map_lgl(Parameter1, ~ any(.x > 10)))

在这个解决方案中,我使用了purrr包中的map_lgl()函数来创建一个逻辑向量,指示Parameter1中是否有任何元素大于10。然后使用dplyr包中的filter()函数根据这个逻辑向量过滤 Dataframe 。

相关问题