簡體   English   中英

從其他列創建特定值的新列

[英]Create new column of specific values from other columns

我有縣數據,但我想創建只列出州的列。 基本上,我有這個:

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'並在我的縣列中選擇“NY”、“TX”等並從中創建一個州列? 謝謝!

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")

如果所有行的數據與顯示的完全一樣,您可以刪除所有內容,直到最后一個逗號和空格后跟它。

df$County <- sub('.*,\\s', '', df$County)

如果州名可以出現在數據中的任何地方,我們可以使用內置常量state.abb並使用它創建一個模式來提取數據,如果出現在county列中的任何地方。

library(stringr)
df$State <- str_extract(df$County, str_c(state.abb, collapse = '|'))

我們可以使用str_remove

library(stringr)
df$State <- str_remove(df$County, ".*,\\s+")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM