>我有一个 r 数据框,在一列中包含美国州和县名称。 数据的格式为:
United States - State name - County name
其中每个像元都是一个唯一的县。 例如:
United States - North Carolina - Wake County
United States - North Carolina - Warren County
etc.
我需要将列分成 2 列,一列仅包含州名,另一列仅包含县名。 我已经尝试了 sub 和 gsub,但没有得到任何结果。我知道这对 r 专家来说可能是一件简单的事情,但我是新手。 如果有人能指出我正确的方向,我将不胜感激。
你可以使用 tidyr
的separate
函数:
library(tidyr)
df <- separate(df, currentColumn, into = c("Country", "State", "County"), sep = " - ")
如果数据与您在问题中显示的一样(包括美国作为国家/地区),并且您的数据框称为 df,并且包含数据的当前列称为 currentColumn。
例:
df <- data.frame(currentColumn = c("United States - North Carolina - Wake County",
"United States - North Carolina - Warren County"), val = rnorm(2))
df
# currentColumn val
#1 United States - North Carolina - Wake County 0.8173619
#2 United States - North Carolina - Warren County 0.4941976
separate(df, currentColumn, into = c("Country", "State", "County"), sep = " - ")
# Country State County val
#1 United States North Carolina Wake County 0.8173619
#2 United States North Carolina Warren County 0.4941976
使用 read.table
,并假设您的数据在df$var
read.table(text=df$var,sep="-",strip.white=TRUE,
col.names=c("Country","State","County"))
如果速度是一个问题,那么strsplit
会快得多:
setNames(data.frame(do.call(rbind,strsplit(df$var,split=" - "))),
c("Country","State","County"))
两者都给出:
# Country State County
#1 United States North Carolina Wake County
#2 United States North Carolina Warren County