我有一個資料集如下;
My_data <- tibble(ref = 1:3, codes = c(12204, 35478, 67456))
我想codes按如下方式分隔列。
該codes列的第一個數字形成一個新變數 clouds。
列的第二個和第三個數字codes形成一個新變數wind_direction。
該codes列的最后兩位數字形成一個新變數wind_speed。
注意:我知道str_match并且str_match_all可以做到這一點。問題是它們回傳一個矩陣。我想要一個解決方案,可以擴展 tibble 以包含三個附加變數。
謝謝你。
uj5u.com熱心網友回復:
您可以使用tidyr::extract帶有適當正則運算式的函式來進行拆分
My_data %>%
mutate(codes = as.character(codes)) %>%
extract(codes, c("clouds","wind_direction","wind_speed"), r"{(\d )(\d{2})(\d{2})}")
# ref clouds wind_direction wind_speed
# <int> <chr> <chr> <chr>
# 1 1 1 22 04
# 2 2 3 54 78
# 3 3 6 74 56
uj5u.com熱心網友回復:
另一種選擇是使用后續separate陳述句根據位置放入新列(但@MrFlick 的效率更高)。
library(tidyverse)
My_data %>%
separate(codes, into=c("clouds", "wind_direction"), sep = 1) %>%
separate(wind_direction, into=c("wind_direction", "wind_speed"), sep = 2)
或者我們可以在數字之間添加一個分隔符,然后再次使用separate:
My_data %>%
mutate(codes = str_replace_all(codes, '^(.{1})(.{2})(.*)$', '\\1_\\2_\\3')) %>%
separate(codes, c("clouds","wind_direction","wind_speed"), sep = "_")
輸出
ref clouds wind_direction wind_speed
<int> <chr> <chr> <chr>
1 1 1 22 04
2 2 3 54 78
3 3 6 74 56
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460008.html
上一篇:在矩陣行中搜索并從R中的列回傳值
