2015-10-30 2 views
-4

У меня есть фреймворк фреймворков, и я хотел бы посмотреть его по-разному.Транспонирование и изменение порядка

Position    Name Salary   GameInfo FPPG teamAbbrev TeamSalary TotalPoints 
9    RB Devonta Freeman 8000 [email protected] 01:00PM ET 28.443  Atl  49800  203.716 
39    WR Alshon Jeffery 6400 [email protected] 01:00PM ET 22.250  Chi  49800  203.716 
45    WR Steve Smith Sr. 6100 [email protected] 01:00PM ET 21.133  Bal  49800  203.716 
47    QB  Andy Dalton 6000 [email protected] 01:00PM ET 24.957  Cin  49800  203.716 
55    RB  Doug Martin 5500 [email protected] 01:00PM ET 18.833   TB  49800  203.716 
64    WR Martavis Bryant 5300 [email protected] 01:00PM ET 25.150  Pit  49800  203.716 
126   TE Antonio Gates 4800 [email protected] 01:00PM ET 24.350   SD  49800  203.716 
128   WR  Stefon Diggs 4800 [email protected] 01:00PM ET 21.433  Min  49800  203.716 
383   DST   Broncos 2900 [email protected] 08:30PM ET 17.167  Den  49800  203.716 
DST.391  DST   Giants 2700 [email protected] 01:00PM ET 9.714  NYG  49800  190.930 
QB.4   QB  Tom Brady 8300 [email protected] 08:25PM ET 28.343   NE  49800  190.930 
RB.137   RB Danny Woodhead 4500 [email protected] 01:00PM ET 17.214   SD  49800  190.930 
RB.55   RB  Doug Martin 5500 [email protected] 01:00PM ET 18.833   TB  49800  190.930 
RB.9   RB Devonta Freeman 8000 [email protected] 01:00PM ET 28.443  Atl  49800  190.930 
TE.126   TE Antonio Gates 4800 [email protected] 01:00PM ET 24.350   SD  49800  190.930 
WR.64   WR Martavis Bryant 5300 [email protected] 01:00PM ET 25.150  Pit  49800  190.930 
WR.39   WR Alshon Jeffery 6400 [email protected] 01:00PM ET 22.250  Chi  49800  190.930 
WR.145   WR Rishard Matthews 4300 [email protected] 08:25PM ET 16.633  Mia  49800  190.930 

Я пытаюсь перенести и манипулировать ею, чтобы заставить его печатать,

team1 1 Devonta Freeman  Alshon Jeffery Steve Smith Sr.  Andy Dalton  Doug Martin Martavis Bryant  Antonio Gates  Stefon Diggs   Broncos 49800 203.716 

team2 2 Giants Tom Brady Danny Woodhead  Doug Martin Devonta Freeman  Antonio Gates Martavis Bryant  Alshon Jeffery Rishard Matthews 49800 190.930 

все это в одном ряду. И удалите остальную информацию. Имена столбцов будут одинаковыми, но я могу добавить их позже. Было бы неплохо заказать по позициям, но не большое дело, если я не могу

Любые мысли о том, как исправить это?

Благодаря

+0

Ну я вижу, где вы собираетесь с этим, но первым от меня не совсем R позволит вам дублировали имена столбцов. Возможно, вам потребуются имена, такие как RB1, RB2, WR1, WR2 и т. Д. – anotherFishGuy

+0

Вам также потребуется изменить свой скрипт в функции порядка. try: test1 <- order (test1 $ Position, c ("QB", "RB", "RB", "WR", "WR", "WR", "TE", c ("RB" | "WR" | «TE»), «DST»)). Вы не можете использовать слово «или» в функции – anotherFishGuy

+0

Спасибо за совет, у меня нет проблем с изменением имен. Просто попробовал вашу предложенную функцию заказа, и я получил следующую ошибку. Ошибка в «RB» | Операции «WR»: возможны только для числовых, логических или сложных типов. – JB17

ответ

0

Это также работает

test8 = teams 
test8$Name = as.character(test8$Name) 

test2=NULL 
for(j in 1:(nrow(test8)/9)){ 
    test = test8[1:9,] 
test3 = split(test, test$Position) 
if(nrow(test3$RB) == 3){ 
    test4 = as.data.frame(cbind(test3$QB$Name, test3$RB$Name[1], test3$RB$Name[2], test3$WR$Name[1], test3$WR$Name[2],test3$WR$Name[3],test3$TE$Name, test3$RB$Name[3], test3$DST$Name[1], test$TeamSalary[1], test$TotalPoints[1])) 
    } else if(nrow(test3$WR) == 4){ 
    test4 = as.data.frame(cbind(test3$QB$Name, test3$RB$Name[1], test3$RB$Name[2], test3$WR$Name[1], test3$WR$Name[2],test3$WR$Name[3],test3$TE$Name, test3$WR$Name[4], test3$DST$Name[1], test$TeamSalary[1], test$TotalPoints[1])) 
    } else { 
    test4 = as.data.frame(cbind(test3$QB$Name, test3$RB$Name[1], test3$RB$Name[2], test3$WR$Name[1], test3$WR$Name[2],test3$WR$Name[3],test3$TE$Name, test3$TE$Name[2], test3$DST$Name[1], test$TeamSalary[1], test$TotalPoints[1])) 
    } 
    test2 = rbind(test2,test4) 
    test8 = test8[-c(1:9),] 
    } 

colnames(test2) = c("QB", "RB", "RB", "WR", "WR", "WR", "TE", "FLEX", "DST", "TeamSalary", "TeamPoints") 
1

ОК, я обновил код, чтобы включить столбец индекса в моем образце кадра данных. В моем случае это называется «Индекс». Чтобы закодировать по индексу, я создал вектор, который извлекал уникальные уровни (ind = unique (data $ Index)), в этом случае только 1 и 2, но в вашем случае 10 000 уровней. Затем в цикле «j» он будет извлекать данные по каждому индексу и извлекать необходимую информацию для каждой из ваших команд.

data = as.data.frame(list(Position = c("WR","WR","QB","RB","WR","RB","WR","TE","DST"), 
         Name=c("Julio Jones","DeAndre Hopkins","Tom Brady","Devonta Freeman", 
          "Alshon Jeffery","Chris Ivory","Martavis Bryant", 
          "Antonio Gates","Broncos"), 
         Salary = c(9200,8700,8300,8000,6400,6000,5300,4800,2900), 
         FPPG = c(25.143,25.657,28.343,28.443,22.250,20.300, 
           25.150,24.350,17.167), 
         TeamSalary = rep(59600,9), 
         TotalPoints = rep(216.803,9), 
         Index = rep(1,9))) 

data1 = as.data.frame(list(Position = c("WR","WR","QB","RB","WR","RB","WR","TE","DST"), 
         Name=c(paste("Player",1:9,sep="")), 
         Salary = c(rnorm(9,5000,100)), 
         FPPG = c(rnorm(9,21,1)), 
         TeamSalary = rep(59600,9), 
         TotalPoints = rep(216.803,9), 
         Index = rep(2,9))) 
data=rbind(data,data1) 
data$Name = as.character(data$Name) 

test2=NULL 

ind = unique(data$Index) 

for(j in 1:length(ind)){ 
    data1 = data[data$Index == ind[j],] 
    points = 0 
    salary = 0 
    test1 = as.data.frame(matrix(nrow = 1,ncol=9)) 
    names(test1) = c("QB", "RB", "RB", "WR", "WR", "WR", "TE", "FLEX", "DST") 
    for(i in 1:dim(test1)[2]){ 
    pos = names(test1)[i] 
    if(pos == "FLEX"){ 
     player = data1[data1$Position %in% c("WR","TE","RB"),] 
    } else { 
     player = data1[data1$Position == pos,] 
    } 
    name = player$Name[which(player$FPPG == max(player$FPPG))] 
    salary = salary + player$Salary[which(player$FPPG == max(player$FPPG))] 
    points = points + player$FPPG[which(player$FPPG == max(player$FPPG))] 
    data1 = data1[data1$Name != name,] 
    test1[,i] = name 
    } 
    test1$TeamSalary = salary 
    test1$TotalPoints = points 
    test2 = rbind(test2,test1) 
} 
test2 
+0

Получил некоторые ошибки с этим. Я только что переработал свои вопросы. В основном у меня есть блок данных команд и просто хочу консолидировать их до 1 строки с игроками, зарплатой и очками на этой линии. Возможно, будет легче сделать и выберет подходящий результат. Дайте мне знать, что вы думаете. По сути, у меня есть блок данных из тысячи команд, и я хочу свернуть его до одной строки для каждой команды с именами игроков, общей зарплатой и суммарными очками по одной строке. – JB17

+0

Не похоже, что у вас есть идентификатор команды в ваших данных кадр, хотя так, как вы знаете, в какую команду находятся игроки? – anotherFishGuy

+0

Они перечислены в порядке, так что первые 9 - это команда 1, следующая 9 команда 2 и так далее. – JB17

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