因此,我有一个包含12列数据的csv文件,我要做的是根据所需条件从CSV文件中获取特定值
提供了一些数据片段,所以我有此地图列表:
Maps <- c("Nuke","Vertigo","Inferno","Mirage","Train","Overpass","Dust2")
目标是为地图列表中的每个地图获取CTWinProb和TWinProb值,例如CTWinProbs;
Nuke = 0.5758
Dust2 = 0.4965
地狱= 0.4885
对于TWinProb,等反之亦然
到目前为止,我一直在使用非常乏味的sqldf库,这是我目前正在做的事情:
T1NukeCT <- sqldf("select CTWinProb from Team1 where MapName like '%Nuke%'")
输出T1NukeCT = 0.5758
并针对每个地图重复,然后再次针对TWinProb
我敢肯定,有一种更简单的方法,对于使用R来说是很新的东西,所以不是100%都是这里的最佳方法,也不是如何以一种不太乏味的方式去做]
您可以使用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')
您到底在寻找什么输出/结果?
如果要在R中得到结果,这是两个返回所需值的简单函数。
它们需要加载dplry软件包。
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")
应该为Nuke返回CTWinProb结果,即:0.5758
[TWinFunc("Nuke")
应该为Nuke返回TWinProb结果,即:0.4242
如果您想返回一个包含所有结果的向量,我想您可以使用sapply
函数。像这样的东西...
TWins <- sapply(Maps, TWinFunc)
TWins[lengths(TWins)==0] <- NA
TWins <- unlist(TWins)
这应该会给您一张带有结果的表:
cbind(Maps, Twins)
当然,似乎所有这些数据都已经在原始表中,您可以将其子集化。
YourData[,c(4,11,12)]