我有一些数字变量,它们被归类为几个波段(比如1-3,3-5,5-7等等)。我想主要为他们的乐队定单。例如,在下面的数据框架中。
df <- data.frame(x = c("1-3", "3-5","5-9", "9-10", "10-12"))
当我在本专栏中运行任何数据操作操作(如group_by、count)时,它将返回此输出。
电流输出
library(tidyverse)
df %>% count(x)
x n
<fct> <int>
1 1-3 1
2 3-5 1
3 5-9 1
4 9-10 1
5 10-12 1
期望输出
x n
<fct> <int>
1 1-3 1
2 3-5 1
3 5-9 1
4 9-10 1
5 10-12 1
重要的备注-解决方案应该是动态的,这意味着它应该在任何类型的数字带上运行,即使它从1000或任何其他数值开始(例如,1250-2500、2500-5000、500-10000、10000 - 20000等)。dplyr中的解决方案是首选方案。
发布于 2020-05-31 08:06:21
如果x
总是按照示例中所示的相同顺序排序,那么在使用count
之前,可以根据它们的外观来安排因素级别。
library(dplyr)
library(rlang)
df %>%
mutate(x = factor(x, levels = unique(x))) %>%
count(x)
然而,一个普遍的解决方案是在"-“之前得到数字,并在此基础上安排数据。
df %>%
mutate(x1 = as.numeric(sub('-.*', '', x)),
x = factor(x, levels = x[order(x1)])) %>%
count(x)
要将其封装到一个函数中,我们可以使用:
count_band_data <- function(data, col, sep = '-') {
data %>%
mutate(temp = as.numeric(sub(paste0(sep, '.*'), '', {{col}})),
{{col}} := factor({{col}}, levels = {{col}}[order(temp)])) %>%
count({{col}})
}
然后将其用作:
df %>% count_band_data(x)
# A tibble: 5 x 2
# x n
# <fct> <int>
#1 1-3 1
#2 3-5 1
#3 5-9 1
#4 9-10 1
#5 10-12 1
https://stackoverflow.com/questions/62113229
复制相似问题