У меня есть набор данных, который выглядит так:
ID Main Size Distance
1 1 2 0
1 0 3 1
1 0 4 2
2 1 5 0
2 0 6 2
2 0 7 3
Для каждого идентификатора и только для тех идентификаторов, где Main равен 0, я хочу умножить размер на расстояние, затем суммировать эти результаты и сохранить их в новой базе данных, которая также включает идентификатор. Результат должен быть примерно таким:
ID Result
1 11
2 33
Как я могу это сделать? Я пробовал разные способы, но в итоге получил NA и NaN. Спасибо!
Хотели бы вы сохранить идентификаторы, в которых нет значения 0 в Main?
filter(df, Main==0) |>
summarise(Result=sum(Size * Distance), .by=ID)
# A tibble: 2 x 2
ID Result
<dbl> <dbl>
1 1 11
2 2 33
Вы могли бы попробовать
df %>%
summarise(Result = sum(Size * Distance * !Main), .by = ID)
который дает
ID Result
1 1 11
2 2 33
Это предложение оказалось наиболее полезным, хотя я адаптировал его к своим данным и немного объединил с решением @Edward. Спасибо!
df |>
filter(Main == 0L) |>
summarise(Result = Size %*% Distance, .by = ID)
# ID Result
# 1 1 11
# 2 2 33
Где
df <- data.frame(
ID = rep(1:2, each = 3L),
Main = rep(c(1L, 0L, 0L), 2),
Size = 2:7,
Distance = c(0L, 1L, 2L, 0L, 2L, 3L)
)
Вычислите вектор Size * Distance
и добавьте в него свое условие перед суммированием:
library(dplyr)
df |>
summarize(Result = sum((Size * Distance)[Main == 0L]), .by = ID)
# ID Result
# 1 1 11
# 2 2 33
Что ты пробовал?