tidyverse
を使用する溶液。 dt_final
が最終出力です。
library(tidyverse)
# Separate the comma
dt2 <- dt %>% separate_rows(Make)
# Calculate the frequency
dt3 <- dt2 %>% count(Zip, Make)
# Prepare the Frequency column
dt4 <- dt3 %>%
mutate(n = paste0("(", n, ")")) %>%
unite(Frequency, Make, n, sep = " ") %>%
group_by(Zip) %>%
summarise(Frequency = paste0(Frequency, collapse = ", "))
# Prepare the Top 3 Make column
dt5 <- dt3 %>%
group_by(Zip) %>%
mutate(Rank = dense_rank(n)) %>%
filter(Rank <= 3) %>%
arrange(Zip, Rank, Make) %>%
select(Zip, Make) %>%
summarise(`Top 3 Make (per frequency)` = paste0(Make, collapse = ", "))
# Join the results
dt_final <- reduce(list(dt, dt4, dt5), left_join, by = "Zip")
dt_final
# Zip Make
# 1 12325 Toyota, Honda, Toyota, Mitsubishi, Mercedes
# 2 85271 Toyota,Honda,Toyota,Honda,Toyota,Toyota,Volvo,Nissan,Nissan,Nissan, Nissan
# 3 56098 Toyota,Honda,Toyota,Mitsubishi,Chevrolet,Acura,Chevrolet,Chevrolet, Honda
# Frequency
# 1 Honda (1), Mercedes (1), Mitsubishi (1), Toyota (2)
# 2 Honda (2), Nissan (4), Toyota (4), Volvo (1)
# 3 Acura (1), Chevrolet (3), Honda (2), Mitsubishi (1), Toyota (2)
# Top 3 Make (per frequency)
# 1 Honda, Mercedes, Mitsubishi, Toyota
# 2 Volvo, Honda, Nissan, Toyota
# 3 Acura, Mitsubishi, Honda, Toyota, Chevrolet
DATA
dt <- read.table(text = "Zip Make
12325 'Toyota, Honda, Toyota, Mitsubishi, Mercedes'
85271 'Toyota,Honda,Toyota,Honda,Toyota,Toyota,Volvo,Nissan,Nissan,Nissan, Nissan'
56098 'Toyota,Honda,Toyota,Mitsubishi,Chevrolet,Acura,Chevrolet,Chevrolet, Honda'",
header = TRUE, stringsAsFactors = FALSE)
これは、これを行う方法はありません。あなたは、簡単に操作し分析を行うことができるように、あなたのデータをきちんとしたフォーマットにしたいと思っています。あなたのデータセットが現在のように分析する方法はありません。特にあなたが出てきたい方法です。 データセットの 'dput()'を最初に提供し、ここに投稿してください –