[英]Is there a way to move every other row in a column into a new column in R?
[英]How to move every other row to a new column in R
我有一個數據框,應該顯示錦標賽的獲勝者和他們的對手。 目前,輸家在每隔一排。 所以,第 1 行是贏家,第 2 行是輸家,第 3 行是贏家,第 4 行是輸家,依此類推。
我希望獲勝者和他們的對手彼此相鄰,以便更容易看到誰與誰競爭。 棘手的部分是將每個人的健身房、姓名和參賽者編號保持在同一行中。
如何將每隔一行移動到一個新列,以便獲勝者和他們的對手在同一行?
y = read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/y.csv')
# FAILED ATTEMPT
library(data.table)
z=dcast(setDT(y)[, grp := gl(.N, 2, .N)], grp ~ rowid(grp),
value.var = setdiff(names(y), 'grp'))[, grp := NULL][]
請注意,兩張照片是不同的數據集
我的 df 目前的樣子:
使用dplyr
你可以這樣做:
library(dplyr)
read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/y.csv') %>%
group_by(fight, date) %>%
summarise(division = first(division),
competitor_1 = first(competitor),
name_1 = first(name),
competitor_2 = last(competitor),
name_2 = last(name))
#> `summarise()` has grouped output by 'fight'. You can override using the
#> `.groups` argument.
#> # A tibble: 61 x 7
#> # Groups: fight [26]
#> fight date division competitor_1 name_1 compe~1 name_2
#> <chr> <chr> <chr> <int> <chr> <int> <chr>
#> 1 BYE BYE Master 2 1 Rafael M~ 1 Rafae~
#> 2 FIGHT 19 Thu 09/01 at 12:14 PM Master 2 2 Piter Fr~ 63 Alan ~
#> 3 FIGHT 20 Thu 09/01 at 01:01 PM Master 2 16 Marques ~ 55 Diego~
#> 4 FIGHT 20 Thu 09/01 at 12:13 PM Master 2 28 Kenned D~ 44 Verge~
#> 5 FIGHT 22 Thu 09/01 at 12:27 PM Master 2 4 Marcus V~ 52 Kian ~
#> 6 FIGHT 23 Thu 09/01 at 12:33 PM Master 2 30 Adam Col~ 46 Steph~
#> 7 FIGHT 23 Thu 09/01 at 12:54 PM Master 2 31 Namrod B~ 47 Stefa~
#> 8 FIGHT 23 Thu 09/01 at 12:58 PM Master 2 13 David Ch~ 53 Joshu~
#> 9 FIGHT 24 Thu 09/01 at 01:08 PM Master 2 3 Sandro G~ 56 Carlo~
#> 10 FIGHT 24 Thu 09/01 at 12:35 PM Master 2 8 Rafael R~ 60 Andre~
#> # ... with 51 more rows, and abbreviated variable name 1: competitor_2
使用reprex v2.0.2創建於 2022-09-16
您的數據集存在一些問題,例如“FIGHT 22”有四個條目(根據您的描述,我預計有兩個條目)。
division gender belt weight fight date competitor name gym
<chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
1 Master 2 Male BLACK Middle FIGHT 22 Thu 09/01 at 12:27 PM 4 Marcus V. C. Antelante Ares BJJ
2 Master 2 Male BLACK Middle FIGHT 22 Thu 09/01 at 12:27 PM 62 Andrew E. Ganthier Renzo Gracie Academy
3 Master 2 Male BLACK Middle FIGHT 22 Thu 09/01 at 12:27 PM 11 Jimmy Dang Khoa Tat CheckMat
4 Master 2 Male BLACK Middle FIGHT 22 Thu 09/01 at 12:27 PM 52 Kian Takumi Kadota Brasa CTA
第 26 場和第 35 場比賽也存在同樣的問題。假設這些問題已得到糾正,並假設奇數行包含贏家,偶數行包含輸家,以下代碼應該可以工作(使用 tidyverse):
y %>%
mutate(outcome = if_else(row_number() %% 2 == 1, "winner", "loser")) %>%
pivot_wider(names_from = outcome, values_from = c(competitor, name, gym))
這會讓你接近你想要的。 它添加了獲勝者列。 奇數指數為贏家,偶數指數為輸家。 為了美觀,我刪除了 BYE 周行。 然后我們按日期分組並戰斗並保留組合行中的所需數據,並將匯總列擴展為獲勝者失敗者信息。
library(dplyr)
y %>%
mutate(
winner = ifelse((y$X %% 2) == 0,'loser','winner')) %>%
filter(date != 'BYE') %>%
group_by(date, fight) %>%
summarise(division = first(division),
belt = first(belt),
weight = first(weight),
gender = first(gender),
winner.rank = first(competitor),
winner = first(name),
winner.gym = first(gym),
opp.rank= last(competitor),
opponent = last(name),
opponent.gym = last(gym))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.