首页 > 解决方案 > 从其他列创建特定值的新列

问题描述

我有县数据,但我想创建仅列出州的列。基本上,我有这个:

County       
County 1, NY  
County 2, NY    
County 3, NY
County 4, TX
County 5, TX
County 6, IL
County 7, IL

但我想要这个:

County          State 
County 1, NY     NY
County 2, NY     NY
County 3, NY     NY
County 4, TX     TX
County 5, TX     TX
County 6, IL     IL
County 7, IL     IL

有没有办法让 R 'find' 并在我的 County 列中选择“NY”、“TX”等并从中创建一个 State 列?谢谢!

标签: rfinddataset

解决方案


dat$State <- gsub(".*\\b([^[:space:]]+)[[:space:]]*$", "\\1", dat$County)
dat
#         County State
# 1 County 1, NY    NY
# 2 County 2, NY    NY
# 3 County 3, NY    NY
# 4 County 4, TX    TX
# 5 County 5, TX    TX
# 6 County 6, IL    IL
# 7 County 7, IL    IL

演练:

  • .*是零个或更多的东西,在这里我们可以丢弃它
  • \\b是一个单词边界,以确保我们得到所有的状态,而不仅仅是它的第二个字母
  • (...)是我们稍后会回忆的组;第一个字符串中括号中的任何内容都可以通过其位置在第二个字符串中引用,如\\1
  • [^[:space:]]+是一个字符类,[:space:]表示任何类似空格的东西,并[^...]否​​定它,所以这意味着任何非空格;尾随+意味着一个或多个
  • [[:space:]]*和以前一样是一个非否定的空格字符类,但现在*意味着零个或多个
  • $是字符串的结尾

数据

dat <- structure(list(County = c("County 1, NY", "County 2, NY", "County 3, NY", "County 4, TX", "County 5, TX", "County 6, IL", "County 7, IL")), row.names = c(NA, -7L), class = "data.frame")

推荐阅读