我正在使用 R 編程語言。
假設我有以下資料集:
v1 <- c("2010-01","2010-02", "2010-03", "2010-04", "2010-05")
v2 <- c("A", "B", "C", "D", "E")
dates <- as.factor(sample(v1, 1000, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
types <- as.factor(sample(v2,1000, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
var = rnorm(1000,10,10)
problem_data = data.frame(var,dates, types)
> head(problem_data)
var dates types
1 -6.772497 2010-01 A
2 6.769367 2010-01 D
3 18.914358 2010-02 C
4 6.517997 2010-02 E
5 19.616047 2010-01 B
6 5.129928 2010-01 B
我正在嘗試制作一個最終資料集,其中包含“型別”列中每個唯一“組”的新列。
我發現了如何使用 R 中的“xtabs”陳述句來做到這一點:
library(dplyr)
graph_data = data.frame(problem_data %>% group_by(dates, types) %>% summarise(count = n()))
graph_data$types <- factor(graph_data$types, levels = c("A", "B", "C", "D", "E"))
final = data.frame(xtabs(count ~ dates types, graph_data))
dates types Freq
1 2010-01 A 161
2 2010-02 A 76
3 2010-03 A 42
4 2010-04 A 45
5 2010-05 A 46
6 2010-01 B 132
我的問題:是否可以在不手動指定因子水平的情況下做到這一點?
我想到了以下方法來做到這一點:
graph_data$types <- factor(graph_data$types, levels = levels(problem_data$types))
這是正確的方法嗎?有沒有其他方法可以做到這一點?
謝謝!
uj5u.com熱心網友回復:
這有幫助嗎?
library(dplyr)
problem_data %>%
group_by(types) %>%
count(dates)
#> # A tibble: 25 × 3
#> # Groups: types [5]
#> types dates n
#> <fct> <fct> <int>
#> 1 A 2010-01 188
#> 2 A 2010-02 77
#> 3 A 2010-03 35
#> 4 A 2010-04 32
#> 5 A 2010-05 31
#> 6 B 2010-01 137
#> 7 B 2010-02 64
#> 8 B 2010-03 27
#> 9 B 2010-04 28
#> 10 B 2010-05 20
#> # … with 15 more rows
由reprex 包于 2022-01-23 創建(v2.0.1)
資料:
set.seed(111)
v1 <- c("2010-01", "2010-02", "2010-03", "2010-04", "2010-05")
v2 <- c("A", "B", "C", "D", "E")
dates <- as.factor(sample(v1, 1000, replace = TRUE, prob = c(0.5, 0.2, 0.1, 0.1, 0.1)))
types <- as.factor(sample(v2, 1000, replace = TRUE, prob = c(0.3, 0.2, 0.1, 0.1, 0.1)))
var <- rnorm(1000, 10, 10)
problem_data <- data.frame(var, dates, types)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/420253.html
標籤:
