Используя пакет data.table
, вы можете пройти через каждый ID
, выбрать первое значение PicName
и Rating
и второе значение Correct
.
library(data.table)
setDT(df) # give df class "data.table"
df[, .( PicName = PicName[1]
, Rating = Rating[1]
, Correct = Correct[2])
, by = ID]
Возвращает
ID PicName Rating Correct
1: 1 flower 4 1
2: 2 cat 5 1
Другой вариант - merge
Строки ответа с другими (дает тот же результат)
setkey(df, ID)
merge(df[PicName != 'Answer', -'Correct']
, df[PicName == 'Answer', .(ID, Correct)])
Используемые данные:
df <- fread(
"ID PicName Rating Correct
1 flower 4 NA
1 Answer NA 1
2 cat 5 NA
2 Answer NA 1")
===================
Если у вас более одной пары на группу ID
, вы можете использовать приведенный ниже код. При этом выбираются строки, где PicName == 'Answer'
равен FALSE
, используются эти строки для столбцов PicName
и Rating
, а затем используются другие строки для столбца Correct
.
library(data.table)
library(magrittr)
setDT(df) # give df class "data.table"
df[, (PicName == 'Answer')
%>% {.(PicName = PicName[!.]
, Rating = Rating[!.]
, Correct = Correct[.])}
, by = ID]