我已經嘗試過pivot_longer()并且gather()從和運行dplyr,tidyr但我似乎無法弄清楚。
example <- data.frame("country"="Central African Republic",
"year"=c(2017,2018,2019,2020,2021),
"life_expectancy.x" = c(51,52,53,54,55),
"sex.x"= "M",
"life_expectancy.y"= c(51.5,52.5,53.5,54.5,55.5),
"sex.y" = "F" )
目前,我有 2 列對應于每種性別的性別和預期壽命。如何為具有男性 (M) 和女性 (F) 值的性別創建一列并且 life_expectancy 相同,但仍然使預期壽命值對應于正確的性別?我想最終得到 1 列國家、1 列年份、1 列性別和 1 列預期壽命。
uj5u.com熱心網友回復:
你可以select和rename列,然后rbind:
rbind(
example %>%
select(1:4) %>%
rename(life_expectancy = life_expectancy.x,
sex = sex.x),
example %>%
select(c(1, 2, 5, 6)) %>%
rename(life_expectancy = life_expectancy.y,
sex = sex.y)
)
輸出:
country year life_expectancy sex
1 Central African Republic 2017 51.0 M
2 Central African Republic 2018 52.0 M
3 Central African Republic 2019 53.0 M
4 Central African Republic 2020 54.0 M
5 Central African Republic 2021 55.0 M
6 Central African Republic 2017 51.5 F
7 Central African Republic 2018 52.5 F
8 Central African Republic 2019 53.5 F
9 Central African Republic 2020 54.5 F
10 Central African Republic 2021 55.5 F
萬一你有不止這兩列以.xand結尾.y:
library(tidyverse)
rbind(
example %>%
select(1:4) %>%
rename_with(~ str_remove(.,".x$"), .cols = ends_with(".x")),
example %>%
select(c(1, 2, 5, 6)) %>%
rename_with(~ str_remove(.,".y$"), .cols = ends_with(".y"))
)
uj5u.com熱心網友回復:
在基數 r 中,嘗試
df<-data.frame("country"=rep(example$country,2),"year"=rep(example$year,2),"life expectancy"=c(example$life_expectancy.x,example$life_expectancy.y),"sex"=c(example$sex.x,example$sex.y))
uj5u.com熱心網友回復:
試試reshape。適用于任意數量的行,無需手動重命名。
您不必設定新的行名稱,但我認為僅使用行號看起來更優雅。
reshape(example, varying=c("life_expectancy.x","life_expectancy.y", "sex.x", "sex.y"),
idvar=c("country", "year"), timevar=NULL,
new.row.names=with( example, 1:length(c(sex.x,sex.y)) ), dir="long" )
country year life_expectancy sex
1 Central African Republic 2017 51.0 M
2 Central African Republic 2018 52.0 M
3 Central African Republic 2019 53.0 M
4 Central African Republic 2020 54.0 M
5 Central African Republic 2021 55.0 M
6 Central African Republic 2017 51.5 F
7 Central African Republic 2018 52.5 F
8 Central African Republic 2019 53.5 F
9 Central African Republic 2020 54.5 F
10 Central African Republic 2021 55.5 F
uj5u.com熱心網友回復:
像這樣的東西使用pivot_longer?
example <- data.frame("country"="Central African Republic",
"year"=c(2017,2018,2019,2020,2021),
"life_expectancy.x" = c(51,52,53,54,55),
"sex.x"= "M",
"life_expectancy.y"= c(51.5,52.5,53.5,54.5,55.5),
"sex.y" = "F" )
library(tidyverse)
example %>%
pivot_longer(c(sex.x, sex.y), names_to = "names_sex", values_to = "sex") %>%
pivot_longer(c(life_expectancy.x, life_expectancy.y), names_to = "names_life",
values_to = "life_expectancy")
#> # A tibble: 20 × 6
#> country year names_sex sex names_life life_expectancy
#> <chr> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Central African Republic 2017 sex.x M life_expectancy.x 51
#> 2 Central African Republic 2017 sex.x M life_expectancy.y 51.5
#> 3 Central African Republic 2017 sex.y F life_expectancy.x 51
#> 4 Central African Republic 2017 sex.y F life_expectancy.y 51.5
#> 5 Central African Republic 2018 sex.x M life_expectancy.x 52
#> 6 Central African Republic 2018 sex.x M life_expectancy.y 52.5
#> 7 Central African Republic 2018 sex.y F life_expectancy.x 52
#> 8 Central African Republic 2018 sex.y F life_expectancy.y 52.5
#> 9 Central African Republic 2019 sex.x M life_expectancy.x 53
#> 10 Central African Republic 2019 sex.x M life_expectancy.y 53.5
#> 11 Central African Republic 2019 sex.y F life_expectancy.x 53
#> 12 Central African Republic 2019 sex.y F life_expectancy.y 53.5
#> 13 Central African Republic 2020 sex.x M life_expectancy.x 54
#> 14 Central African Republic 2020 sex.x M life_expectancy.y 54.5
#> 15 Central African Republic 2020 sex.y F life_expectancy.x 54
#> 16 Central African Republic 2020 sex.y F life_expectancy.y 54.5
#> 17 Central African Republic 2021 sex.x M life_expectancy.x 55
#> 18 Central African Republic 2021 sex.x M life_expectancy.y 55.5
#> 19 Central African Republic 2021 sex.y F life_expectancy.x 55
#> 20 Central African Republic 2021 sex.y F life_expectancy.y 55.5
由reprex 包(v0.3.0)于 2021 年 12 月 14 日創建
uj5u.com熱心網友回復:
example <- data.frame("country"="Central African Republic",
"year"=c(2017,2018,2019,2020,2021),
"life_expectancy.x" = c(51,52,53,54,55),
"sex.x"= "M",
"life_expectancy.y"= c(51.5,52.5,53.5,54.5,55.5),
"sex.y" = "F" )
library(data.table)
setDT(example)
output <- melt(example, measure = patterns("^life_expectancy", "^sex"), value.name = c("life_expectancy", "sex"))
output[, variable := NULL]
output
# country year life_expectancy sex
# 1: Central African Republic 2017 51.0 M
# 2: Central African Republic 2018 52.0 M
# 3: Central African Republic 2019 53.0 M
# 4: Central African Republic 2020 54.0 M
# 5: Central African Republic 2021 55.0 M
# 6: Central African Republic 2017 51.5 F
# 7: Central African Republic 2018 52.5 F
# 8: Central African Republic 2019 53.5 F
# 9: Central African Republic 2020 54.5 F
# 10: Central African Republic 2021 55.5 F
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380647.html
標籤:r
