Как искать данные и печатать значения на основе критериев в R? - PullRequest
1 голос
/ 25 марта 2020

Итак, у меня есть CSV-файл, который содержит 12 столбцов данных, и я хочу получить определенные значения c из CSV-файла на основе требуемых критериев

enter image description here

Предоставлен фрагмент данных, поэтому у меня есть этот список карт:

Maps <- c("Nuke","Vertigo","Inferno","Mirage","Train","Overpass","Dust2")

Цель состоит в том, чтобы получить значения CTWinProb и TWinProb для каждого карт в списке карт, например, CTWinProbs;

Nuke = 0,5758

Dust2 = 0,4965

Inferno = 0,4885

et c и т. д. Версия для TWinProb

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

T1NukeCT <- sqldf("select CTWinProb from Team1 where MapName like '%Nuke%'")

, которая выдает T1NukeCT = 0.5758

и повторение для каждой карты, а затем снова для TWinProb

Я уверен, что есть более простой способ, просто совершенно новый для использования R, так что я не на 100% лучший метод здесь или как go об этом менее утомительно

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вы можете использовать предложение WHERE IN (...):

Maps <- c("Nuke","Vertigo","Inferno","Mirage","Train","Overpass","Dust2")
where_in <- paste0("('", paste(Maps, collapse="','"), "')")
sql <- paste0("SELECT CTWinProb FROM Team1 WHERE MapName IN ", where_in)
T1NukeCT <- sqldf(sql)

Для ясности, запрос SQL, сгенерированный вышеуказанным сценарием:

SELECT CTWinProb
FROM Team1
WHERE MapName IN ('Nuke','Vertigo','Inferno','Mirage','Train','Overpass','Dust2')
0 голосов
/ 25 марта 2020

Какой вывод / результаты вы ищете именно?

Если вам нужны результаты в R, это две простые функции для возврата желаемых значений.

Они требуют загрузки пакета dplyr.

library(dplyr)
YourData <- read_csv("./yourfile/.csv")

CTWinFunc <- function(x){
YourData %>% filter(MapName == x) %>% pull(CTWinProb)}

TWinFunc <- function(x){
YourData %>% filter(MapName == x) %>% pull(TWinProb)}

Теперь CTWinFunc("Nuke") должен возвращать результат CTWinProb для Nuke, ie: 0.5758

И TWinFunc("Nuke") должен возвращать результат TWinProb для Nuke, ie: 0.4242

Если вы хотите вернуть вектор со всеми результатами вместе, я думаю, вы могли бы использовать функцию sapply(). Примерно так ...

TWins <- sapply(Maps, TWinFunc)
TWins[lengths(TWins)==0] <- NA
TWins <- unlist(TWins)

И это должно дать вам таблицу с результатами:

cbind(Maps, Twins)

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

YourData[,c(4,11,12)]
...