2015-11-30 1 views
1

Если бы у меня был csv ниже, и вам нужно было переименовать команду «Синего» с самым высоким рейтингом в каждой строке, как я могу это сделать. Более 100 000 строк в полном наборе данных.R-язык найти и заменить на несколько столбцов для каждой строки

Например, если «Blue Team B» - четвертый, а «Blue Team A» - шестой, я хочу переименовать «Blue Team B» в качестве «Blue Winner», например.

Position 1,Position 2,Position 3,Position 4,Position 5,Position 6 
Blue Team B,Red Team 1,Green Team 1,Blue Team A,Red Team 2,Green Team 2 
Red Team 2,Green Team 2,Green Team 1,Blue Team 1,Blue Team 2,Red Team 1 
Green Team 1,Red Team 1,Green Team 2,Blue Team B,Red Team 2,Blue Team A 
Green Team 1,Red Team 1,Green Team 2,Blue Team A,Red Team 2,Blue Team B 
Blue Team B,Red Team 2,Blue Team A,Green Team 1,Red Team 1,Green Team 2 

ответ

0

Попробуйте это:

mat <- scan(text="Position 1,Position 2,Position 3,Position 4,Position 5,Position 6 
Blue Team B,Red Team 1,Green Team 1,Blue Team A,Red Team 2,Green Team 2 
Red Team 2,Green Team 2,Green Team 1,Blue Team 1,Blue Team 2,Red Team 1 
Green Team 1,Red Team 1,Green Team 2,Blue Team B,Red Team 2,Blue Team A 
Green Team 1,Red Team 1,Green Team 2,Blue Team A,Red Team 2,Blue Team B 
Blue Team B,Red Team 2,Blue Team A,Green Team 1,Red Team 1,Green Team 2", 
      skip=1,what="character",sep=',') 
winner <- apply(mat,1,function(x) grep("Blue",x)[which.min(grep("Blue",x))]) 
mat[cbind(1:nrow(mat),winner)] <- "Blue Winner" 

Вы, вероятно, хотите, чтобы заменить text="Position 1,Position 2,... с file="yourfile.csv".

0

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

# Setting an option. 
options(stringsAsFactors = FALSE) 

# Defining the teams. Abbreviating for shortness. 
teams <- c("B1", "R1", "G1", "B2", "R1", "G2", "BB", "BA") 
items <- 100 

# Creating sample data. 
data <- data.frame(

    # Getting a random assortment of places for each column. This COULD and probably will overlap, but that's okay for this example. 
    pos1 = sample(teams, items, replace = TRUE), 
    pos2 = sample(teams, items, replace = TRUE), 
    pos3 = sample(teams, items, replace = TRUE), 
    pos4 = sample(teams, items, replace = TRUE), 
    pos5 = sample(teams, items, replace = TRUE), 
    pos6 = sample(teams, items, replace = TRUE) 

) 

# Saving the data to compare it against later. 
dataSave <- data 

# Running an apply through the sample data. 
data <- apply(data, 1, function(x) { 

    first <- grep("B", x)[1] # Getting the first place the occurence of "B". Replace this with "Blue" for your data. 
    x[first] <- "B Winner" # Replacing the first B and designating it at as a winner. 
    return(x) 

}) 

# Transposing back as apply turned the data and converting back to data frame. 
data <- t(data) 
data <- as.data.frame(data) 

Aaaand, Сэм бил меня на удар, но отправляя код в любом случае.

Смежные вопросы