使用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]