У меня есть группы из 20, где только одно наблюдение имеет значение одного для переменной, и я пытаюсь преобразовать другие переменные так, чтобы оставшиеся 19 наблюдений и я получили следующую ошибку.
«длинная длина объекта не кратна короткой длине объекта»
library(dplyr)
test <- data.frame('prod_id'= c("shoe", "shoe", "shoe", "shoe", "shoe",
"shoe", "boat", "boat","boat","boat","boat","boat", "ship", "ship", "ship",
"ship", "ship", "ship"),
'seller_id'= c("a", "b", "c", "d", "e", "f", "a","g", "h", "r",
"q", "b", "qe", "dj", "d3", "kk", "dn", "de"),
'Dich'= c(1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
'price' = c(120, 20, 10, 4, 3, 4, 30, 43, 56, 88, 75, 44, 32,
21, 44, 54, 55, 33)
)
Интересно, этот код работает:
test2 <- test %>%
group_by(prod_id) %>%
mutate(price_diff = if(any(Dich ==1)) ((price - price[Dich ==
1])/(price + price[Dich == 1])/2) else NA)
Пока этот код
test2 <- test %>%
group_by(prod_id) %>%
mutate(diff_p = if(any(Dich==1)) price - price[Dich == 1] else NA)
выдает ошибку «длинная длина объекта не кратна короткой длине объекта». К сожалению, мне не удалось воспроизвести данные примера, поэтому я надеюсь, что кто-то может понять, в чем проблема.
Я видел этот пост
Большая длина объекта не кратна короткой длине объекта?
но объекты имеют одинаковое количество строк, и я не уверен, почему один синтаксис сработает, хотя небольшое изменение преобразования вызовет ошибку.