使用多个文件在R中装箱值
因此,我在将多个文本文件中包含的值组合到设置的范围时遇到了一个小问题。我在网上查看了各种软件包,发现sm可以指定bin值,您也可以指定bin范围,如下所示:-使用多个文件在R中装箱值,r,text-files,binning,R,Text Files,Binning,因此,我在将多个文本文件中包含的值组合到设置的范围时遇到了一个小问题。我在网上查看了各种软件包,发现sm可以指定bin值,您也可以指定bin范围,如下所示:- xb <- binning(x, breaks=seq(-4,4,by=0.5)) xb有几种方法,我将提供一种使用基函数的方法。(另一种选择是使用dplyr,这也非常适合。不过,基本示例应该足够简单。) 生成数据 (这只是因为我们没有您的任何数据。) 每个垃圾箱的统计数据 在这一领域,许多其他选择可能是有利的。例如,基本函数by
xb <- binning(x, breaks=seq(-4,4,by=0.5))
xb有几种方法,我将提供一种使用基函数的方法。(另一种选择是使用dplyr
,这也非常适合。不过,基本示例应该足够简单。)
生成数据
(这只是因为我们没有您的任何数据。)
每个垃圾箱的统计数据
在这一领域,许多其他选择可能是有利的。例如,基本函数by
可以工作,尽管处理其数据结构并不总是直观的,即使函数调用本身很容易阅读:
head(by(df$x, df$bin, median, na.rm = TRUE))
## df$bin
## (0,0.05] (0.05,0.1] (0.1,0.15] (0.15,0.2] (0.2,0.25] (0.25,0.3]
## 0.03802277 NA 0.11528715 0.18195392 0.22918094 0.27132242
您还可以轻松地使用dplyr
。本例从原始的allData
和allbin
开始:
library(dplyr)
data.frame(x = allData) %>%
mutate(bin = cut(x, breaks = allBins)) %>%
group_by(bin) %>%
summarise(median(x))
## Source: local data frame [17 x 2]
## bin median(x)
## 1 (0,0.05] 0.03802277
## 2 (0.1,0.15] 0.11528715
## 3 (0.15,0.2] 0.18195392
## 4 (0.2,0.25] 0.22918094
## 5 (0.25,0.3] 0.27132242
#### ..snip..
第一个示例保留空箱子,而其他方法不知道空箱子。可能还有其他使用by
和dplyr
的方法,包括这些空箱子,但这似乎就足够了
编辑
经过一段时间的聊天,确定数据范围太宽,存储箱宽度为0.0005。设计了一个更好的解决方案。(没有提供样本数据,对不起,不是我提供的…)我将使用随机数据模拟过程:
set.seed(42)
x <- 5e7 * runif(5e5)
library(dplyr)
binSize <- 0.0005
df <- data.frame(dat = sort(x))
df$bin <- floor(df$dat / binSize) * binSize
head(df)
## dat bin
## 1 410.9577 410.9575
## 2 456.6275 456.6270
## 3 552.3674 552.3670
## 4 875.4898 875.4895
## 5 1018.6806 1018.6805
## 6 1102.2436 1102.2435
system.time(results <- df %>% group_by(bin) %>% summarize(med = median(dat)))
## user system elapsed
## 12.08 0.00 12.11
head(results)
## Source: local data frame [6 x 2]
## bin med
## 1 410.9575 410.9577
## 2 456.6270 456.6275
## 3 552.3670 552.3674
## 4 875.4895 875.4898
## 5 1018.6805 1018.6806
## 6 1102.2435 1102.2436
set.seed(42)
有几种方法,我将提供一种使用基函数的方法。(另一种选择是使用dplyr
,这也非常适合。不过,基本示例应该足够简单。)
生成数据
(这只是因为我们没有您的任何数据。)
每个垃圾箱的统计数据
在这一领域,许多其他选择可能是有利的。例如,基本函数by
可以工作,尽管处理其数据结构并不总是直观的,即使函数调用本身很容易阅读:
head(by(df$x, df$bin, median, na.rm = TRUE))
## df$bin
## (0,0.05] (0.05,0.1] (0.1,0.15] (0.15,0.2] (0.2,0.25] (0.25,0.3]
## 0.03802277 NA 0.11528715 0.18195392 0.22918094 0.27132242
您还可以轻松地使用dplyr
。本例从原始的allData
和allbin
开始:
library(dplyr)
data.frame(x = allData) %>%
mutate(bin = cut(x, breaks = allBins)) %>%
group_by(bin) %>%
summarise(median(x))
## Source: local data frame [17 x 2]
## bin median(x)
## 1 (0,0.05] 0.03802277
## 2 (0.1,0.15] 0.11528715
## 3 (0.15,0.2] 0.18195392
## 4 (0.2,0.25] 0.22918094
## 5 (0.25,0.3] 0.27132242
#### ..snip..
第一个示例保留空箱子,而其他方法不知道空箱子。可能还有其他使用by
和dplyr
的方法,包括这些空箱子,但这似乎就足够了
编辑
经过一段时间的聊天,确定数据范围太宽,存储箱宽度为0.0005。设计了一个更好的解决方案。(没有提供样本数据,对不起,不是我提供的…)我将使用随机数据模拟过程:
set.seed(42)
x <- 5e7 * runif(5e5)
library(dplyr)
binSize <- 0.0005
df <- data.frame(dat = sort(x))
df$bin <- floor(df$dat / binSize) * binSize
head(df)
## dat bin
## 1 410.9577 410.9575
## 2 456.6275 456.6270
## 3 552.3674 552.3670
## 4 875.4898 875.4895
## 5 1018.6806 1018.6805
## 6 1102.2436 1102.2435
system.time(results <- df %>% group_by(bin) %>% summarize(med = median(dat)))
## user system elapsed
## 12.08 0.00 12.11
head(results)
## Source: local data frame [6 x 2]
## bin med
## 1 410.9575 410.9577
## 2 456.6270 456.6275
## 3 552.3670 552.3674
## 4 875.4895 875.4898
## 5 1018.6805 1018.6806
## 6 1102.2435 1102.2436
set.seed(42)
有几种方法,我将提供一种使用基函数的方法。(另一种选择是使用dplyr
,这也非常适合。不过,基本示例应该足够简单。)
生成数据
(这只是因为我们没有您的任何数据。)
每个垃圾箱的统计数据
在这一领域,许多其他选择可能是有利的。例如,基本函数by
可以工作,尽管处理其数据结构并不总是直观的,即使函数调用本身很容易阅读:
head(by(df$x, df$bin, median, na.rm = TRUE))
## df$bin
## (0,0.05] (0.05,0.1] (0.1,0.15] (0.15,0.2] (0.2,0.25] (0.25,0.3]
## 0.03802277 NA 0.11528715 0.18195392 0.22918094 0.27132242
您还可以轻松地使用dplyr
。本例从原始的allData
和allbin
开始:
library(dplyr)
data.frame(x = allData) %>%
mutate(bin = cut(x, breaks = allBins)) %>%
group_by(bin) %>%
summarise(median(x))
## Source: local data frame [17 x 2]
## bin median(x)
## 1 (0,0.05] 0.03802277
## 2 (0.1,0.15] 0.11528715
## 3 (0.15,0.2] 0.18195392
## 4 (0.2,0.25] 0.22918094
## 5 (0.25,0.3] 0.27132242
#### ..snip..
第一个示例保留空箱子,而其他方法不知道空箱子。可能还有其他使用by
和dplyr
的方法,包括这些空箱子,但这似乎就足够了
编辑
经过一段时间的聊天,确定数据范围太宽,存储箱宽度为0.0005。设计了一个更好的解决方案。(没有提供样本数据,对不起,不是我提供的…)我将使用随机数据模拟过程:
set.seed(42)
x <- 5e7 * runif(5e5)
library(dplyr)
binSize <- 0.0005
df <- data.frame(dat = sort(x))
df$bin <- floor(df$dat / binSize) * binSize
head(df)
## dat bin
## 1 410.9577 410.9575
## 2 456.6275 456.6270
## 3 552.3674 552.3670
## 4 875.4898 875.4895
## 5 1018.6806 1018.6805
## 6 1102.2436 1102.2435
system.time(results <- df %>% group_by(bin) %>% summarize(med = median(dat)))
## user system elapsed
## 12.08 0.00 12.11
head(results)
## Source: local data frame [6 x 2]
## bin med
## 1 410.9575 410.9577
## 2 456.6270 456.6275
## 3 552.3670 552.3674
## 4 875.4895 875.4898
## 5 1018.6805 1018.6806
## 6 1102.2435 1102.2436
set.seed(42)
有几种方法,我将提供一种使用基函数的方法。(另一种选择是使用dplyr
,这也非常适合。不过,基本示例应该足够简单。)
生成数据
(这只是因为我们没有您的任何数据。)
每个垃圾箱的统计数据
在这一领域,许多其他选择可能是有利的。例如,基本函数by
可以工作,尽管处理其数据结构并不总是直观的,即使函数调用本身很容易阅读:
head(by(df$x, df$bin, median, na.rm = TRUE))
## df$bin
## (0,0.05] (0.05,0.1] (0.1,0.15] (0.15,0.2] (0.2,0.25] (0.25,0.3]
## 0.03802277 NA 0.11528715 0.18195392 0.22918094 0.27132242
您还可以轻松地使用dplyr
。本例从原始的allData
和allbin
开始:
library(dplyr)
data.frame(x = allData) %>%
mutate(bin = cut(x, breaks = allBins)) %>%
group_by(bin) %>%
summarise(median(x))
## Source: local data frame [17 x 2]
## bin median(x)
## 1 (0,0.05] 0.03802277
## 2 (0.1,0.15] 0.11528715
## 3 (0.15,0.2] 0.18195392
## 4 (0.2,0.25] 0.22918094
## 5 (0.25,0.3] 0.27132242
#### ..snip..
第一个示例保留空箱子,而其他方法不知道空箱子。可能还有其他使用by
和dplyr
的方法,包括这些空箱子,但这似乎就足够了
编辑
经过一段时间的聊天,确定数据范围太宽,存储箱宽度为0.0005。设计了一个更好的解决方案。(没有提供样本数据,对不起,不是我提供的…)我将使用随机数据模拟过程:
set.seed(42)
x <- 5e7 * runif(5e5)
library(dplyr)
binSize <- 0.0005
df <- data.frame(dat = sort(x))
df$bin <- floor(df$dat / binSize) * binSize
head(df)
## dat bin
## 1 410.9577 410.9575
## 2 456.6275 456.6270
## 3 552.3674 552.3670
## 4 875.4898 875.4895
## 5 1018.6806 1018.6805
## 6 1102.2436 1102.2435
system.time(results <- df %>% group_by(bin) %>% summarize(med = median(dat)))
## user system elapsed
## 12.08 0.00 12.11
head(results)
## Source: local data frame [6 x 2]
## bin med
## 1 410.9575 410.9577
## 2 456.6270 456.6275
## 3 552.3670 552.3674
## 4 875.4895 875.4898
## 5 1018.6805 1018.6806
## 6 1102.2435 1102.2436
set.seed(42)
x供参考,在基本R中有?cut
用于装箱价值。我应该提到,我希望在设定范围内装箱价值(对于我正在做的事情,我希望装箱的价值在0.0005范围内,所以是200.0000-200.0005等),我将编辑上面的文本以合并所有这些,但是这些文件都是.txt文件,因为我有太多的.csv值,它的形式是x1、x2、x3(比如104、204、223.3432)等等。基本上,我的目标是将所有值分组,然后当所有值在给定范围内分组时,如果有意义的话,我想取原始非分组值的所有值的中位数。例如,如果我有1,2,4,5,10,我用一个