我想知道是否有一種方法可以將每組名稱相似的列 ( ratio_..., EL_..., Teacher_...) 轉換為 R 中的長格式?
我嘗試了以下解決方案(使用tidyr::pivot_longer()),但我的輸出中出現了幾個NAs。
我懷疑這些NAs 與names_sep = "_". 但我只是想讓一列作為鍵(稱為year)填充數字年份,如 2019、2020、2021。
library(tidyverse)
data <- read.csv("https://raw.githubusercontent.com/ilzl/i/master/prac.csv") %>%
pivot_longer(cols = -id, names_to = c(".value", "year"), names_sep = "_")
uj5u.com熱心網友回復:
您可以將_年份之前的值替換為另一個值,例如“X”,然后使用names_sep="X":
data %>%
rename_with(~str_replace(.x, pattern="_(?=20\\d{2})","X"), .cols = -id) %>%
pivot_longer(-id,names_to=c(".value", "year"), names_sep="X")
或者,您可以放棄列的重命名,如果您使用names_pattern, 具有類似的正則運算式模式:
pivot_longer(
data,
-id,
names_to=c(".value", "year"),
names_pattern = "(.*(?=20\\d{2}))(.)"
)
uj5u.com熱心網友回復:
在這種情況下,您想拆分最后一次出現的_,一種方法是在引數中使用正先行names_sep:
library(tidyr)
read.csv("https://raw.githubusercontent.com/ilzl/i/master/prac.csv") %>%
pivot_longer(
cols = -id,
names_to = c(".value", "year"),
names_sep = "_(?=[^_] $)"
)
# A tibble: 246 × 5
id year ratio_EL2FC EL_count Teacher_count
<int> <chr> <dbl> <int> <int>
1 1894 2019.20 30.5 61 2
2 1894 2020.21 32 64 2
3 1894 2021.22 32.5 65 2
4 1900 2019.20 24 24 1
5 1900 2020.21 23 23 1
6 1900 2021.22 17 17 1
7 1901 2019.20 41.2 535 13
8 1901 2020.21 36.8 552 15
9 1901 2021.22 38.5 577 15
10 1923 2019.20 56.2 225 4
# … with 236 more rows
# ? Use `print(n = ...)` to see more rows
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534810.html
上一篇:關于R中沖積地塊的簡單一個
