В base R
мы можем unlist
первых 3 столбцов, создать table
с индексом строки rep
, проверить, является ли счет больше 0 и присвоить ли его столбцам 4-6.
df1[4:6] <- table(seq_len(nrow(df1))[row(df1[1:3])], unlist(df1[1:3]))[,1:3] > 0
df1
# Fruits1 Fruits2 Fruits3 Apple Banana Lemon
#1 N/A N/A Apple TRUE FALSE FALSE
#2 Apple Lemon N/A TRUE FALSE TRUE
#3 N/A Banana Apple TRUE TRUE FALSE
ПРИМЕЧАНИЕ. Пропущенные значения NA
указаны в виде символьной строки ("N/A"
)
ПРИМЕЧАНИЕ 2. Это векторизация, а не циклическая обработка по каждой строке
данные
df1 <- structure(list(Fruits1 = c("N/A", "Apple", "N/A"), Fruits2 = c("N/A",
"Lemon", "Banana"), Fruits3 = c("Apple", "N/A", "Apple"), Apple = c("N/A",
"N/A", "N/A"), Banana = c("N/A", "N/A", "N/A"), Lemon = c("N/A",
"N/A", "N/A")), class = "data.frame", row.names = c(NA, -3L))