[英]R data frame organization
我是一名初級數據科學家,在 NCAA 橄欖球計划中工作,試圖學習 R。我們在練習期間記錄重復測量數據,需要對其進行組織然后分析。 我有這個示例數據集,由於“活動”列中的變化/錯別字,我在分析時遇到了麻煩。 我需要一種方法來重命名/組織數據框中的活動。
原始數據集如下所示:
位置 | 活動 | 最大速度(英里/小時) |
---|---|---|
寫字樓 | 特別小組 1 | 20 |
寫字樓 | 特別小組1 | 19 |
寫字樓 | 特別小組1 | 18 |
寫字樓 | 特別小組2 | 13 |
寫字樓 | ST 2 | 16 |
寫字樓 | 聖 2 | 19 |
寫字樓 | 1隊 | 12 |
寫字樓 | 1隊 | 20 |
寫字樓 | 1隊 | 23 |
寫字樓 | 團隊 2 | 21 |
寫字樓 | 團隊 2 | 10 |
寫字樓 | 團隊 2 | 3 |
寫字樓 | 3隊 | 21 |
寫字樓 | 3隊 | 11 |
寫字樓 | 3隊 | 16 |
寫字樓 | 印地 1 | 20 |
寫字樓 | 印地 2 | 21 |
寫字樓 | 印地3 | 22 |
我需要它看起來像這樣:
位置 | 活動 | 最大速度(英里/小時) | 活動_類別 |
---|---|---|---|
寫字樓 | 特別小組 1 | 20 | 特別小組 |
寫字樓 | 特別小組1 | 19 | 特別小組 |
寫字樓 | 特別小組1 | 18 | 特別小組 |
寫字樓 | 特別小組2 | 13 | 特別小組 |
寫字樓 | ST 2 | 16 | 特別小組 |
寫字樓 | 聖 2 | 19 | 特別小組 |
寫字樓 | 1隊 | 12 | 團隊 |
寫字樓 | 1隊 | 20 | 團隊 |
寫字樓 | 1隊 | 23 | 團隊 |
寫字樓 | 團隊 2 | 21 | 團隊 |
寫字樓 | 團隊 2 | 10 | 團隊 |
寫字樓 | 團隊 2 | 3 | 團隊 |
寫字樓 | 3隊 | 21 | 團隊 |
寫字樓 | 3隊 | 11 | 團隊 |
寫字樓 | 3隊 | 16 | 團隊 |
寫字樓 | 印地 1 | 20 | 印地 |
寫字樓 | 印地 2 | 21 | 印地 |
寫字樓 | 印地3 | 22 | 印地 |
通過這種方式,我可以在每種類型的活動中分析因變量“Max_velocity”的平均值。 我寧願不制作單獨的代碼行來糾正“活動”列中的每個錯字。 我認為這可以用循環來完成,但我是初學者,不知道從哪里開始。 我將不勝感激任何幫助使其成為一個簡單的修復。
這是解決您問題的另一種方法
library(stringr)
df$Activity_Catagory <- str_to_title(df$Activity) |>
str_remove(" \\d") |>
str_replace("St", "Special Team")
# Position Activity Max_Velocity (mph) Activity_Catagory
# 1 WR Special Team 1 20 Special Team
# 2 WR special team 1 19 Special Team
# 3 WR Special team 1 18 Special Team
# 4 WR special Team 2 13 Special Team
# 5 WR ST 2 16 Special Team
# 6 WR St 2 19 Special Team
# 7 WR team 1 12 Team
# 8 WR team 1 20 Team
# 9 WR team 1 23 Team
# 10 WR team 2 21 Team
# 11 WR team 2 10 Team
# 12 WR team 2 3 Team
# 13 WR team 3 21 Team
# 14 WR team 3 11 Team
# 15 WR team 3 16 Team
# 16 WR Indy 1 20 Indy
# 17 WR indy 2 21 Indy
# 18 WR INDY 3 22 Indy
您可能需要首先根據您的數據定義規則。 哪些值會被稱為“Special Team”,哪些會被稱為“Team”等等。
基於示例共享我們可以做不區分大小寫的模式匹配與grepl
使用和列表的條件case_when
-
library(dplyr)
df %>%
mutate(Activity_Category = case_when(grepl('Special Team', Activity, ignore.case = TRUE) |
grepl('ST ', Activity, ignore.case = TRUE) ~ 'Special Team',
grepl('Team', Activity, ignore.case = TRUE) ~ 'Team',
grepl('Indy', Activity, ignore.case = TRUE) ~ 'Indy'))
# Position Activity Max_Velocity..mph. Activity_Category
#1 WR Special Team 1 20 Special Team
#2 WR special team 1 19 Special Team
#3 WR Special team 1 18 Special Team
#4 WR special Team 2 13 Special Team
#5 WR ST 2 16 Special Team
#6 WR St 2 19 Special Team
#7 WR team 1 12 Team
#8 WR team 1 20 Team
#9 WR team 1 23 Team
#10 WR team 2 21 Team
#11 WR team 2 10 Team
#12 WR team 2 3 Team
#13 WR team 3 21 Team
#14 WR team 3 11 Team
#15 WR team 3 16 Team
#16 WR Indy 1 20 Indy
#17 WR indy 2 21 Indy
#18 WR INDY 3 22 Indy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.