用另一列替换一列的值我正在处理数据集的预处理过程。这是我的数据集的概述
BSTN ASTN
150 216
300 222
4310 35
60 4310
150 23
4310 60
. .
. .
. .
数字 BSTN ASTN 表示站的代码编号我有另一个 BSTN 数据集,ASTN 数字显示站号。这是它的样子
Station code Station
150 A
300 A
4310 B
23 C
60 C
. .
. .
. .
问题是有些站有两个或多个代码。例如站 A 的站号是 150, 300
我想将BSTN和ASTN中具有多个站号的站号统一为一个统一的站号。我也想把BSTN、ASTN中的代码编号统一成一个频率更高的数字
BSTN ASTN
150 216
150 222
4310 35
60 4310
150 60
4310 60
. .
. .
. .
我想要的最终输出如下所示。
我将不胜感激
让我们输入您的数据
library(readr)
stations <- read_table(
"BSTN ASTN
150 216
300 222
4310 35
60 4310
150 23
4310 60")
stCodex <- read_table(
"Station_code Station
150 A
300 A
4310 B
23 C
60 C "
)
让我们把两列放在一个小标题中,这样我们就可以找出每个站最受欢迎的 Station_code
st2 <- tibble(replaceBy = c(stations$BSTN, stations$ASTN)) %>%
left_join(stCodex, by = c("replaceBy" = "Station_code")) %>%
filter(!is.na(Station)) %>%
group_by(Station, replaceBy) %>%
summarise(Count = n()) %>%
# We have a count of each Station's Station_codes. Find the most frequent
mutate(BestCount = max(Count)) %>%
filter(Count == BestCount) %>%
summarise_all(~ first(.)) %>%
arrange(Station) %>%
select(Station, replaceBy)
看起来像:
# A tibble: 3 x 2
Station replaceBy
<chr> <dbl>
1 A 150
2 B 4310
3 C 60
建立一个替换表 - 用较高的替换低频的 Station_codes。
rplc <- stCodex %>%
left_join(st2, by = "Station") %>%
filter(Station_code != replaceBy) %>%
select(- Station)
给予
# A tibble: 2 x 2
Station_code replaceBy
<dbl> <dbl>
1 300 150
2 23 60
进行替换 - 首先在 BSTN,然后在 ASTN
stations %>%
left_join(rplc, by = c(BSTN ="Station_code")) %>%
mutate(BSTN = ifelse(is.na(replaceBy), BSTN, replaceBy)) %>%
select(- replaceBy) %>%
left_join(rplc, by = c(ASTN ="Station_code")) %>%
mutate(ASTN = ifelse(is.na(replaceBy), ASTN, replaceBy)) %>%
select(- replaceBy)
答案是
# A tibble: 6 x 2
BSTN ASTN
<dbl> <dbl>
1 150 216
2 150 222
3 4310 35
4 60 4310
5 150 60
6 4310 60
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句