Во-первых, вы должны как-то передать свои данные в R. Этот процесс выходит за рамки ответа.
temp
# NAME ID Value
# 1 A ID1 V1
# 2 A ID2 V2
# 3 A ID3 V3
# 4 B ID4 V4
# 5 C ID5 V5
# 6 C ID6 V6
# 7 <NA> ID3 V7
# 8 <NA> ID1 V8
# 9 <NA> ID5 V9
# 10 <NA> ID4 V10
# 11 <NA> ID5 V11
В следующем решении не используется dplyr
, только базовый R с do.call
.
temp2 <- table (temp$NAME, temp$ID)
temp2
# ID1 ID2 ID3 ID4 ID5 ID6
# A 1 1 1 0 0 0
# B 0 0 0 1 0 0
# C 0 0 0 0 1 1
Вы не можете использовать таблицу напрямую. Сначала вы должны преобразовать его в фрейм данных.
temp3 <- as.data.frame.matrix(temp2)
temp3
# ID1 ID2 ID3 ID4 ID5 ID6
# A 1 1 1 0 0 0
# B 0 0 0 1 0 0
# C 0 0 0 0 1 1
Например, вы хотите заменить NA, соответствующий ID5, на «C».
rownames (temp3[which(temp3$ID5 == 1),])
# [1] "C"
Теперь давайте поместим это в функцию.
returnName <- function (df, id)
{
rowTemp <- do.call ('$', list(df, id))
name <- rownames (df[which(rowTemp == 1),])
return (name)
}
temp$NAME <- sapply (temp$ID, returnName, df = temp3)
temp
# NAME ID Value
# 1 A ID1 V1
# 2 A ID2 V2
# 3 A ID3 V3
# 4 B ID4 V4
# 5 C ID5 V5
# 6 C ID6 V6
# 7 A ID3 V7
# 8 A ID1 V8
# 9 C ID5 V9
# 10 B ID4 V10
# 11 C ID5 V11