R 从数据框中的多个列中删除 "st"、"nd"、"rd"、"th"
R remove "st", "nd", "rd", "th" from multiple columns in dataframe
我在第 1 列中有一个曲棍球队名称的数据框。在第 2-16 列中,统计类别排名(第一、第二、第三、第四...等等)。我想从所有类别中删除所有非数字金额,所以我只剩下 (1, 2, 3, 4...)
我知道我可以 gsub("th", "", dataframe$column_name)
每一列,但是有没有办法在所有列中快速做到这一点?
一个想法是使用 mutate_at
将替换功能应用于您想要的列,如下所示。这里我提供了两个替换函数:str_replace
和 str_extract
,它们都有效。 mutate_at
、str_replace
和 str_extract
均来自 tidyverse
包。
library(tidyverse)
# Create an example data frame
dat <- tibble(
A = c("1st", "2nd", "3rd"),
B = c("8th", "5th", "6th"),
C = c("7th", "101st", "23rd"),
Team = c("A", "B", "C")
)
# Solution 1: str_replace
dat %>%
mutate_at(vars(-Team), list(~as.integer(str_replace(., "st|nd|rd|th", ""))))
# # A tibble: 3 x 4
# A B C Team
# <int> <int> <int> <chr>
# 1 1 8 7 A
# 2 2 5 101 B
# 3 3 6 23 C
# Solution 2: str_extract
dat %>%
mutate_at(vars(-Team), list(~as.integer(str_extract(., "[0-9]*"))))
# # A tibble: 3 x 4
# A B C Team
# <int> <int> <int> <chr>
# 1 1 8 7 A
# 2 2 5 101 B
# 3 3 6 23 C
我在第 1 列中有一个曲棍球队名称的数据框。在第 2-16 列中,统计类别排名(第一、第二、第三、第四...等等)。我想从所有类别中删除所有非数字金额,所以我只剩下 (1, 2, 3, 4...)
我知道我可以 gsub("th", "", dataframe$column_name)
每一列,但是有没有办法在所有列中快速做到这一点?
一个想法是使用 mutate_at
将替换功能应用于您想要的列,如下所示。这里我提供了两个替换函数:str_replace
和 str_extract
,它们都有效。 mutate_at
、str_replace
和 str_extract
均来自 tidyverse
包。
library(tidyverse)
# Create an example data frame
dat <- tibble(
A = c("1st", "2nd", "3rd"),
B = c("8th", "5th", "6th"),
C = c("7th", "101st", "23rd"),
Team = c("A", "B", "C")
)
# Solution 1: str_replace
dat %>%
mutate_at(vars(-Team), list(~as.integer(str_replace(., "st|nd|rd|th", ""))))
# # A tibble: 3 x 4
# A B C Team
# <int> <int> <int> <chr>
# 1 1 8 7 A
# 2 2 5 101 B
# 3 3 6 23 C
# Solution 2: str_extract
dat %>%
mutate_at(vars(-Team), list(~as.integer(str_extract(., "[0-9]*"))))
# # A tibble: 3 x 4
# A B C Team
# <int> <int> <int> <chr>
# 1 1 8 7 A
# 2 2 5 101 B
# 3 3 6 23 C