[英]To sum the columns and display results in other column
這讓我困擾了 2 天。
我有這樣的數據
Account.ID asset_name
6yS A
6yS B
6yS B
6yS C
6yU D
876 C
從這里我想制作更多類似假人的列。 但我只想要每個 ID 一行。
我的輸出應該是這樣的
Account.ID asset_name Flag_A Flag_B Flag_C Flag_D
6yS A 1 2 1 0
6yU D 0 0 0 1
876 C 0 0 1 0
我嘗試聚合,但他們將其放入另一個表中,我不想再次合並,因為我會丟失信息。
請幫幫我。 提前謝謝你。
這個?
df %>%
count(Account.ID, asset_name) %>%
tidyr::pivot_wider( names_from = asset_name,
values_from = n,
values_fill = list(n = 0))
# A tibble: 3 x 5
Account.ID A B C D
<chr> <int> <int> <int> <int>
1 6yS 1 2 1 0
2 6yU 0 0 0 1
3 876 0 0 1 0
您可以使用dcast
的data.table
和fun.aggregate
參數:
library(data.table)
dcast(data = setDT(df)[, asset_name := paste0('Flag_', asset_name)],
formula = Account.ID ~ asset_name,
fun.aggregate = length)
輸出:
Account.ID Flag_A Flag_B Flag_C Flag_D
1: 6yS 1 2 1 0
2: 6yU 0 0 0 1
3: 876 0 0 1 0
這是一個tidyverse解決方案,雖然不是最優雅的。
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 <- df %>%
group_by(Account.ID, asset_name) %>%
summarise(Count = n()) %>%
spread(key = asset_name, value = Count, fill = 0)
返回:
Account.ID A B C D
<fct> <dbl> <dbl> <dbl> <dbl>
1 6yS 1 2 1 0
2 6yU 0 0 0 1
3 876 0 0 1 0
我想我有一個答案給你。 所以這是你的數據集:
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
這就是你要找的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.