【问题标题】:Adding a column to a df based on comparison with a list through strsplit() in R通过 R 中的 strsplit() 与列表进行比较,将列添加到 df
【发布时间】:2021-11-06 02:41:28
【问题描述】:

我已经做了一段时间的工作,但仍然没有弄清楚如何让它以我喜欢的方式工作。希望有人可以帮助我:

我有一个包含大量关于城市预算的数据(5000+ obs)的数据框,因此,其中一个变量名称显然是“城市”。我有一个单独的 40 个城市列表,我想附加到这个数据框,并且基本上有条件地检查 df 中的每个城市名称,如果它也在单独的列表中(因此;将其编码为 1;否则为 0)。我在下面用较小的数据集做了一个例子:

city <- c(rep("city_a", 8), rep("city_b", 5), rep("city_c", 4), rep("city_d", 7), 
rep("city_e", 3), rep("city_f", 9), rep("city_g", 4)) 
school <- c(1:8, 1:5, 1:4, 1:7,1:3, 1:9, 1:4)
df <- data.frame(city, school)

seperate_list <- tolower("City_A, City_B, City_E, City_G")
seperate_list <- gsub('[,]', '', seperate_list)
seperate_list <- strsplit(seperate_list, " ")[[1]]

注意:你可以问;为什么第二部分会这样?我的数据集要大得多,我想找到一种方法使该过程更加自动化,例如我不必手动删除所有逗号并将城市名称彼此分开。现在我有了df和seperate_list,我想将它们组合到df中,方法是添加第三列,指定每个城市是否(1)(0)在单独的列表中。我尝试过使用 for 循环和 lapply,但没有运气,因为我对这两个方面都不是很熟练。

我会很感激一个提示,所以我可以找到自己!

【问题讨论】:

  • 预期结果是什么?
  • 感谢您的评论!我描述了预期的结果而不是显示它,也许这有点不清楚。无论如何,@danlooo 提供的解决方案正是我想要的。
  • 我不清楚“我想合并它们”是否意味着更多,而不仅仅是附加列。然而,当您接受@danloo 的回答时,您的意图就很明确了。
  • 注意separate的拼写。
  • 谢谢 G.,从这篇文章中的错别字数量来看,对我来说这是漫长的一天 :)

标签: r gsub strsplit


【解决方案1】:
library(tidyverse)

city <- c(rep("city_a", 8), rep("city_b", 5), rep("city_c", 4), rep("city_d", 7), 
          rep("city_e", 3), rep("city_f", 9), rep("city_g", 4)) 
school <- c(1:8, 1:5, 1:4, 1:7,1:3, 1:9, 1:4)
df <- data.frame(city, school)

seperate_list <- tolower("City_A, City_B, City_E, City_G")
seperate_list <- gsub('[,]', '', seperate_list)
seperate_list <- strsplit(seperate_list, " ")[[1]]


df %>%
  mutate(
    in_list = city %in% seperate_list
  ) %>%
  as_tibble()
#> # A tibble: 40 x 3
#>    city   school in_list
#>    <chr>   <int> <lgl>  
#>  1 city_a      1 TRUE   
#>  2 city_a      2 TRUE   
#>  3 city_a      3 TRUE   
#>  4 city_a      4 TRUE   
#>  5 city_a      5 TRUE   
#>  6 city_a      6 TRUE   
#>  7 city_a      7 TRUE   
#>  8 city_a      8 TRUE   
#>  9 city_b      1 TRUE   
#> 10 city_b      2 TRUE   
#> # … with 30 more rows

reprex package (v2.0.1) 于 2021-09-09 创建

我认为您还可以查看连接表并将感兴趣的列表作为另一个表的列。这会查找数据库和关系代数的用途。

【讨论】:

    猜你喜欢
    • 2023-01-27
    • 2018-11-15
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多