add valor perdido basado en el valor de la columna en r
Este es mi conjunto de datos de muestra:
vector1 <-
data.frame(
"name" = "a",
"age" = 10,
"fruit" = c("orange", "cherry", "apple"),
"count" = c(1, 1, 1),
"tag" = c(1, 1, 2)
)
vector2 <-
data.frame(
"name" = "b",
"age" = 33,
"fruit" = c("apple", "mango"),
"count" = c(1, 1),
"tag" = c(2, 2)
)
vector3 <-
data.frame(
"name" = "c",
"age" = 58,
"fruit" = c("cherry", "apple"),
"count" = c(1, 1),
"tag" = c(1, 1)
)
list <- list(vector1, vector2, vector3)
print(list)
Esta es mi prueba:
default <- c("cherry",
"orange",
"apple",
"mango")
for (num in 1:length(list)) {
#print(list[[num]])
list[[num]] <- rbind(
list[[num]],
data.frame(
"name" = list[[num]]$name,
"age" = list[[num]]$age,
"fruit" = setdiff(default, list[[num]]$fruit),#add missed value
"count" = 0,
"tag" = 1 #not found solutions
)
)
print(paste0("--------------", num, "--------"))
print(list)
}
#print(list)
Estoy tratando de encontrar qué fruta falta en el marco de datos y la fruta se basa en el valor de la etiqueta. Por ejemplo, en el primer marco de datos, hay etiquetas 1 y 2. Si el valor de la etiqueta 1 no tiene la fruta predeterminada, como la manzana y el plátano, la fruta predeterminada omitida se agregará a 0 al marco de datos. El formato de expectativa le gusta lo siguiente:
[[1]]
name age fruit count tag
1 a 10 orange 1 1
2 a 10 cherry 1 1
3 a 10 apple 1 2
4 a 10 mango 0 1
5 a 10 apple 0 1
6 a 10 mango 0 2
7 a 10 orange 0 2
8 a 10 cherry 0 2
Cuando verifico el proceso del bucle, también encuentro que el primer bucle agrega mango 3 veces y no encuentro la razón por la que no puede agregar el valor perdido de una sola vez. La salida general le gusta lo siguiente:
[[1]]
name age fruit count tag
1 a 10 orange 1 1
2 a 10 cherry 1 1
3 a 10 apple 1 2
4 a 10 mango 0 1
5 a 10 mango 0 1
6 a 10 mango 0 1
[[2]]
name age fruit count tag
1 b 33 apple 1 2
2 b 33 mango 1 2
3 b 33 cherry 0 1
4 b 33 orange 0 1
[[3]]
name age fruit count tag
1 c 58 cherry 1 1
2 c 58 apple 1 1
3 c 58 orange 0 1
4 c 58 mango 0 1
¿Alguien me ayuda y proporciona métodos simples u otras formas? ¿Debo usar la función sqldf para agregar valor 0? ¿Es esta una forma simple de resolver mis problemas?