r - R基于字符串列中的元素重复行
问题描述
我有一个或多或少的具体问题,可能与 R 中的循环有关。我有一个数据框:
X location year
1 North Dakota, Minnesota, Michigan 2011
2 California, Tennessee 2012
3 Bastrop County (Texas) 2013
4 Dallas (Texas) 2014
5 Shasta (California) 2015
6 California, Oregon, Washington 2011
我对这些数据有两个问题:1)我需要一个仅包含每行的状态名称的列。我想这应该很容易使用 gsub 并使用所有美国州名的列表。
list <- c("Alabama", "Alaska", "Arizona", "Arkansas", "California", "etc")
pat <- paste0("\\b(", paste0(list, collapse="|"), ")\\b")
pat
data$state <- gsub(data$location, "", paragraph)
对我来说更大的问题是 2)我需要为数据集中的每个状态单独(重复)行。因此,如果第 6 行在 2011 年有加利福尼亚、俄勒冈和华盛顿,我需要像这样分别为每个单独的行:
X location year
1 California 2011
2 Oregon 2011
3 Washington 2011
感谢您的帮助!
解决方案
您可以使用str_extract_all
提取所有状态并unnest
复制行,以便每个状态位于单独的行中。有一个内置常量state.name
,它具有美国的州名,可用于创建模式。
library(dplyr)
pat <- paste0("\\b", state.name, "\\b", collapse = "|")
df %>%
mutate(states = stringr::str_extract_all(location, pat)) %>%
tidyr::unnest(states)
# A tibble: 11 x 3
# location year states
# <chr> <int> <chr>
# 1 North Dakota, Minnesota, Michigan 2011 North Dakota
# 2 North Dakota, Minnesota, Michigan 2011 Minnesota
# 3 North Dakota, Minnesota, Michigan 2011 Michigan
# 4 California, Tennessee 2012 California
# 5 California, Tennessee 2012 Tennessee
# 6 Bastrop County (Texas) 2013 Texas
# 7 Dallas (Texas) 2014 Texas
# 8 Shasta (California) 2015 California
# 9 California, Oregon, Washington 2011 California
#10 California, Oregon, Washington 2011 Oregon
#11 California, Oregon, Washington 2011 Washington
数据
df <- structure(list(location = c("North Dakota, Minnesota, Michigan",
"California, Tennessee", "Bastrop County (Texas)", "Dallas (Texas)",
"Shasta (California)", "California, Oregon, Washington"), year = c(2011L,
2012L, 2013L, 2014L, 2015L, 2011L)), class = "data.frame", row.names = c(NA, -6L))
推荐阅读
- python - Flask-Login logout_user 不改变 is_authenticated
- php - Laravel 查询绑定和取消绑定
- javascript - Google+“链接无效”错误添加到任何社交共享
- mysql - 如何更新 MySql 中的数百万条记录?
- java - java中的可选参数(可以为null)
- python - 如何交换列表中的两个字节并最终将其打印为 int?
- php - 如何在没有标准身份验证的情况下使用 laravel RegisterController (php artisan make:Auth)
- c# - 为什么字符串不能转换为日期时间?
- javascript - Javascript - 如何验证类构造函数的参数是否存在
- usb - /sys/bus/usb/ 在所有 Linux 发行版中具有相同的结构