【问题标题】:Use range of addresses in column values to create new rows with single addresses in R使用列值中的地址范围在 R 中创建具有单个地址的新行
【发布时间】:2023-01-19 02:01:33
【问题描述】:

给定以下数据:

data <- data.frame("Street" = c("Example1", "Example2", "Example3", "Example4"),
                   "Number" = c("10-20a", "4b-8", NA, "14-16"))
    Street Number
1 Example1 10-20a
2 Example2   4b-8
3 Example3   <NA>
4 Example4  14-16

我如何使用如下所示的每个单独地址创建数据框:

data_long <- data.frame("Street" = c(rep("Example1", 11), rep("Example2", 5),
                                     "Example3", rep("Example4", 3)),
                        "Number" = c(10:19,"20a", "4b", 5:8, NA, c(14:16)))
     Street Number
1  Example1     10
2  Example1     11
3  Example1     12
4  Example1     13
5  Example1     14
6  Example1     15
7  Example1     16
8  Example1     17
9  Example1     18
10 Example1     19
11 Example1    20a
12 Example2     4b
13 Example2      5
14 Example2      6
15 Example2      7
16 Example2      8
17 Example3   <NA>
18 Example4     14
19 Example4     15
20 Example4     16

我尝试拆分数字和字母,然后使用 rowwisemutate 但它不起作用,因为字母在每个地址旁边。

【问题讨论】:

  • 当你得到解决方案时,删除问题是非常不礼貌的

标签: r dataframe range


【解决方案1】:

我们可能会使用

library(dplyr)
library(stringr)
library(tidyr)
library(purrr)
data %>% 
  mutate(v1 = str_extract(Number, "\d+[a-z]"),
   Number = map2(readr::parse_number(Number), 
   as.numeric(str_extract(Number, "-(\d+)", group = 1)), `:`)) %>% 
  unnest(Number) %>% 
  mutate(Number = case_when(str_detect(v1, as.character(Number)) 
   ~ v1, TRUE ~ as.character(Number)), v1 = NULL)

【讨论】:

  • 由于 NA,我得到一个错误:
猜你喜欢
  • 2020-01-10
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多