Как читать словами и добавлять в таблицу согласно словам - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь, чтобы R прочитал слова в каждом столбце и добавил их в таблицу, основываясь на том, сделал ли каждый игрок это событие.

Набор данных Я пытаюсь получить информацию от:

structure(list(Players = c("Mandy", "Jlin", "Gray", "Kiersten", 
"Kelsey", "Karlie", "Jordan", "Lilly", "McCarter", "Emma", "Alia", 
NA, NA, NA, NA, NA, NA, NA, NA), Subs = c(NA, NA, NA, NA, "Mance", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), FSU = c("6 good alia tackle", 
"1 bad", "them pi", "2 good 1 bad", "7 good 1 bad", "them pi", 
"2 good 1 bad", "them pi", "8 good them turnover", "them pi", 
"3 good 1 bad", "them pi", "4 good kelsey tackle them turnover", 
"them pi", "6 good them shot saved mandy SOG", "them pi", "8 good 1 bad", 
"them pi", "1 bad"), PI = c("jordan", "mccarter", "kiersten", 
"jordan", "jlin", "alia", "mandy", "mandy", NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA), TI = c("them ti good 8 good 1 bad", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA), Cleared = c("jordan", NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Corner = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), Tackles = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA), `Free Kicks` = c("kelsey free kick to gray bad", 
"them free kick short good 3 good jordan fouls", "them free kick bad", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), Fouls = c("lilly fouls", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA), VT = c("jordan to karlie karlie turnover unforced", 
"jlin to gray bad", "alia to kiersten to lilly to kiersten bad", 
"mandy to karlie bad", "kelsey to mccarter to jordan to emma emma fouled", 
"mandy to karlie bad", "mandy to kiersten cleared bad", NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 19L
), class = "data.frame")

Мне удалось прочитать в пасах и добавить подсчет каждому игроку и тому, кому они его передали, используя следующий код ниже:

pass = sub('_$','_good',sub("(.*\\w+ to (?:\\w+(?=.*(bad))|\\w+)).*",'\\1_\\2',dat$VT,perl = T))
pass1 = gsub('(to(\\s[^_ ]+(?=\\s)))','\\1_good\n\\2',pass,perl=T)
results = xtabs(V3~.,cbind(read.csv(text=gsub('to',',',pass1),h=F,strip.white = T),V3=1))

results
          V2
V1         emma_good gray_bad jordan_good karlie_bad karlie_good kiersten_bad kiersten_good lilly_good mccarter_good
  alia             0        0           0          0           0            0             1          0             0
  jlin             0        1           0          0           0            0             0          0             0
  jordan           1        0           0          0           1            0             0          0             0
  kelsey           0        0           0          0           0            0             0          0             1
  kiersten         0        0           0          0           0            0             0          1             0
  lilly            0        0           0          0           0            1             0          0             0
  mandy            0        0           0          2           0            1             0          0             0
  mccarter         0        0           1          0           0            0             0          0             0

Поскольку у меня все хорошо и пасы работают, как и ожидалось, мне интересно, сможет ли кто-нибудь помочь мне прочитать другие колонки. Но сейчас я хотел бы найти способ завершить столбец перехваченных проходов (в моем наборе данных это столбец "PI"), поэтому его моделирование вне таблицы для проходов после вызова некоторого кода должно привести к в чем-то похожем на это:

Player           PI
Mandy             2
Jlin              1
Gray              0
Kiersten          1
Kelsey            0
Karlie            0
Jordan            2
Lilly             0
McCarter          1
Emma              0
Alia              1

Спасибо, Сэм

1 Ответ

0 голосов
/ 23 мая 2019

Мы можем получить подсчет частоты, преобразовав столбец 'PI' в класс factor с levels, указанным в качестве 'Players', и обернуть его с table.Обратите внимание, что в обоих столбцах есть несоответствие.Чтобы сопоставить эти столбцы, мы изменяем его на строчные буквы

table(factor(tolower(dat$PI), levels = tolower(na.omit(dat$Players)),
        labels = na.omit(dat$Players)))

#  Mandy     Jlin     Gray Kiersten   Kelsey   Karlie   Jordan    Lilly McCarter     Emma     Alia 
#      2        1        0        1        0        0        2        0        1        0        1 

или вводим первую букву в 'PI' в верхний регистр, а затем делаем table

tbl <- table(factor(sub("^(.)", "\\U\\1", na.omit(dat$PI),
          perl = TRUE), levels = na.omit(dat$Players)))
tbl
#   Mandy     Jlin     Gray Kiersten   Kelsey   Karlie   Jordan    Lilly McCarter     Emma     Alia 
#    2        1        0        1        0        0        2        0        0        0        1 

Он может быть преобразован в две колонки data.frame

out <- data.frame(Player = names(tbl), PI = as.vector(tbl))

Или это может быть сделано с помощью трубы

library(dplyr)
dat %>%
  transmute(PI = factor(tolower(PI), levels = tolower(na.omit(Players)),
       labels = na.omit(Players))) %>% 
  na.omit %>%
  count(PI, .drop = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...