У меня возникли проблемы с перемещением строк из таблицы .csv. Вот пример:
Допустим, у меня есть таблица 8x2, и я хочу превратить ее в таблицу 4x3, используя matchid в качестве ссылки. Пример:
matchid | playerid
1 | 23
1 | 15
1 | 12
1 | 65
1 | 21
1 | 45
1 | 123
1 | 11
Ожидал:
matchid | playerid.x | playerid.y
1 | 23 | 21
1 | 15 | 45
1 | 12 | 123
1 | 65 | 11
Я попытался использовать функцию для обхода моей таблицы и заполнения нового массива:
collectData = function (data){
matriz = matrix()
count = 1
col = 1
for(i in 1:nrow(data)){
if (count < 4){
matriz[i,col] = data[i,2]
count = count + 1
}
if (count == 4) {
count = 0
col = col + 1
}
}
return(matriz)
}
Редактировать :
The CSV table has 3 columns and n rows, I want to split it by rows in half then put the second half aside from the first half
@DaniloSilva Однако ваш вопрос не совсем ясен, что CSV имеет статический размер (8x2), и вы хотите разделить его на 2 равные группы (x
и y
), или есть другие критерии для определения значений x
из y
' с? (Когда вы говорите «используя matchid в качестве ссылки», это будет означать, что его значение определяет, следует ли присваивать playerid
x или y, но ваш пример говорит об обратном, поскольку все значения matchid
равны 1)
@BenChaliahAyoub Стол больше, это всего лишь его часть. В нем всего 2 столбца, первый столбец (macthid) идет от 1 до n. Второй столбец (идентификатор игрока) содержит идентификатор соответствующих игроков, которые совпадают. X и Y должны продемонстрировать, что я разделился на две команды для одного и того же матча.
Основываясь на том, что вы указали в своем комментарии, я предлагаю этот простой подход.
If CSV isa
Dataframe
(Otherwise you can convert it), Here's an example:
In[1]: df = data.frame(cbind(c(1,1,1,1), c(1,2,3,4)))
Out[2]:
X1 X2
1 1 1
2 1 2
3 1 3
4 1 4
In[3]: x <- subset(df, as.numeric(rownames(df))<=(length(df$X2)/2))
In[4]: y <- subset(df, as.numeric(rownames(df))>(length(df$X2)/2))
In[5]: z <- data.frame(cbind(matchid=df$X1, playerid.x=x[,2], playerid.y=y[,2]))
In[6]: head(z,(length(z[,1])/2))
Out[7]:
matchid playerid.x playerid.y
[1,] 1 1 3
[2,] 1 2 4
Если ваш фрейм данных все еще имеет повторяющиеся данные. Вы бы предпочли удалить их, вместо того, чтобы звонить главе? Потому что может быть matchid = 2 с другим playerid.
Вы можете просто сохранить возврат головы в z
, и они будут удалены.
@Danilo В SO запрещены языки, отличные от английского (есть португальская версия pt.stackoverflow.com), на этот раз я перевел ее, когда в следующий раз другие участники закроют ваш пост.