R:从列中的字符串中提取数值
R: Extracting numerical values from strings in a column
我对数据框的 1 个特定列感兴趣,其中每行包含一个社区的名称和分配给该社区的特定编号。
TOR - 胡德 - 班伯里-唐米尔斯 (42) ( 23.6%)
请查看此图片以便更好地理解
neighborhoodnum
我只想提取第一个括号内的数字。
TOR - 胡德 - 奥尔德伍德 (20) ( 25.4%)
我试过使用 stringr 包,但所有函数一次只接受 1 个字符串。此列中有 140 行,我想要所有行中的值。我不确定如何遍历列中的每个字符串
Here is what I have tried and the results
和我使用的一些代码但出现此错误(UseMethod("type") 中的错误:没有适用于 'type' 的方法应用于 class 的对象"c('tbl_df', 'tbl', 'data.frame')")
hood_data<-tibble(hood=demo_edu_dataset$Geography)
head(hood_data)
hoodnum<-hood_data %>%
#separate(hood, into= c("name", "number"), sep = "")
stringr::str_extract_all(hood_data, "\d")
谢谢
也许你可以像下面那样尝试gsub
,例如
df <- data.frame(X = c("TOR - HOOD - Alderwood (20) ( 25.4%)",
"TOR - HOOD - Annex (95) ( 27.9%)"))
df$Y <- as.numeric(gsub(".*?\((\w+)\).*","\1",df$X))
这样
> df
X Y
1 TOR - HOOD - Alderwood (20) ( 25.4%) 20
2 TOR - HOOD - Annex (95) ( 27.9%) 95
hoodnum<-hood_data %>%
separate(Geography, into= c("name", "number"), sep = "\(")
这有效
或者使用 stringr
包中的 str_extract
以及正向后视和前视:
str_extract(YOURDATA, "(?<=\()\d{1,}(?=\))")
这个正则表达式表示:"when you see (
on the left and )
on the right, match the number with at least 1 digit in the middle"。
如果将 as.numeric
包裹在整个表达式中,数字将从字符转换为数字:
as.numeric(str_extract(df$X, "(?<=\()\d{1,}(?=\))"))
我对数据框的 1 个特定列感兴趣,其中每行包含一个社区的名称和分配给该社区的特定编号。
TOR - 胡德 - 班伯里-唐米尔斯 (42) ( 23.6%)
请查看此图片以便更好地理解 neighborhoodnum
我只想提取第一个括号内的数字。 TOR - 胡德 - 奥尔德伍德 (20) ( 25.4%)
我试过使用 stringr 包,但所有函数一次只接受 1 个字符串。此列中有 140 行,我想要所有行中的值。我不确定如何遍历列中的每个字符串
Here is what I have tried and the results
和我使用的一些代码但出现此错误(UseMethod("type") 中的错误:没有适用于 'type' 的方法应用于 class 的对象"c('tbl_df', 'tbl', 'data.frame')")
hood_data<-tibble(hood=demo_edu_dataset$Geography)
head(hood_data)
hoodnum<-hood_data %>%
#separate(hood, into= c("name", "number"), sep = "")
stringr::str_extract_all(hood_data, "\d")
谢谢
也许你可以像下面那样尝试gsub
,例如
df <- data.frame(X = c("TOR - HOOD - Alderwood (20) ( 25.4%)",
"TOR - HOOD - Annex (95) ( 27.9%)"))
df$Y <- as.numeric(gsub(".*?\((\w+)\).*","\1",df$X))
这样
> df
X Y
1 TOR - HOOD - Alderwood (20) ( 25.4%) 20
2 TOR - HOOD - Annex (95) ( 27.9%) 95
hoodnum<-hood_data %>%
separate(Geography, into= c("name", "number"), sep = "\(")
这有效
或者使用 stringr
包中的 str_extract
以及正向后视和前视:
str_extract(YOURDATA, "(?<=\()\d{1,}(?=\))")
这个正则表达式表示:"when you see (
on the left and )
on the right, match the number with at least 1 digit in the middle"。
如果将 as.numeric
包裹在整个表达式中,数字将从字符转换为数字:
as.numeric(str_extract(df$X, "(?<=\()\d{1,}(?=\))"))