Я думаю, у меня есть ответ для вас. Итак, это ваш набор данных:
Account.ID <- c("6yS", "6yS", "6yS", "6yS", "6yU", 876)
asset_name <- c("A", "B", "B", "C", "D", "C")
df <- data.frame(Account.ID, asset_name)
df
Account.ID asset_name
1 6yS A
2 6yS B
3 6yS B
4 6yS C
5 6yU D
6 876 C
Для дальнейших преобразований я использую tidyverse, поэтому установите его и загрузите библиотеку:
install.packages("tidyverse")
library(tidyverse)
df <-df %>%
group_by(Account.ID, asset_name) %>%
summarize(n=n()) %>%
spread(asset_name, n)
df
# A tibble: 3 x 5
# Groups: Account.ID [3]
Account.ID A B C D
<fct> <int> <int> <int> <int>
1 6yS 1 2 1 NA
2 6yU NA NA NA 1
3 876 NA NA 1 NA
Теперь все, что нужно сделать, это включить NA. в 0 и переименуйте столбцы:
df[is.na(df)] <- 0
names(df)[2:ncol(df)] <- paste0("Flag_", names(df)[2:ncol(df)])
df
# A tibble: 3 x 5
# Groups: Account.ID [3]
Account.ID Flag_A Flag_B Flag_C Flag_D
<fct> <dbl> <dbl> <dbl> <dbl>
1 6yS 1 2 1 0
2 6yU 0 0 0 1
3 876 0 0 1 0
Это то, что вы искали?