R:手动指定因子水平
R: Manually Specifying Factor Levels
我正在使用 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))
这是执行此操作的正确方法吗?还有其他方法吗?
谢谢!
这有帮助吗?
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 package (v2.0.1)
于 2022-01-23 创建
数据:
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)
我正在使用 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))
这是执行此操作的正确方法吗?还有其他方法吗?
谢谢!
这有帮助吗?
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 package (v2.0.1)
于 2022-01-23 创建数据:
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)