gpt4 book ai didi

r - 按类型列表列中的值过滤数据框

转载 作者:行者123 更新时间:2023-12-04 14:24:39 26 4
gpt4 key购买 nike

我知道有很多类似的问题得到了回答。例如: Filter data.frame rows by a logical condition .问题是当列的类型是列表时,这些答案不起作用。

事实上,我正在使用 Yelp businesses dataset我使用库加载的 jsonlite (压平结果)。其中一列(业务类别)是字符串列表。

> typeof(business_df["categories"])
[1] "list"
> business_df[1:3, "categories"]
[[1]]
[1] "Shopping" "Shopping Centers"

[[2]]
[1] "Food" "Soul Food" "Convenience Stores" "Restaurants"

[[3]]
[1] "Food" "Coffee & Tea"

现在,我有这个糟糕的解决方案:

filterByCategory <- function(category) {
filtered_df <- cbind(businesses_df)
if (category != "All") {
filtered_df[, "belongs"] <-
apply(filtered_df["categories"], 1, function(x)
is.element(category, x[[1]]))
filtered_df <<- subset(filtered_df, belongs)
}
}

如您所见,我需要使用 [[1]] 语法访问该列。这就是为什么我认为这些解决方案都不起作用:

# All rows returned 
business_df[category %in% business_df$categories]
subset(business_df, category %in% business_df$categories)
# No rows returned
business_df %>% filter(category %in% categories)

最佳答案

听起来您正在尝试过滤列表列包含特定值的数据框。

categories 是向量列表。 map_lgl 会将列表的每个元素(向量)映射到一个逻辑

library('tidyverse')

df <- tribble(
~rownum, ~categories,
1, c('a', 'b'),
2, c('c', 'd'),
3, c('d', 'e')
)

# All rows containing the 'd' category
df %>%
filter(map_lgl(categories, ~'d' %in% .)) %>%
str
#> Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 2 variables:
#> $ rownum : num 2 3
#> $ categories:List of 2
#> ..$ : chr "c" "d"
#> ..$ : chr "d" "e"

关于r - 按类型列表列中的值过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48350991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com