首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R将值替换为bin

R将值替换为bin
EN

Stack Overflow用户
提问于 2011-11-18 07:33:23
回答 2查看 837关注 0票数 1

我有一个具有整数值的df。出于分类的目的,我想用一个更简单的df替换这个df,它有预先确定的间隔,而不是整数。我如何有效地做到这一点呢?示例如下:

df:

代码语言:javascript
运行
复制
   1   2   3
1  5   3   0 
2  1   10  12
3  3   0   10

转换为:

代码语言:javascript
运行
复制
   1      2      3
1  [3-5]  [3-5]  [0-2]
2  [0-2]  [10-12][10-12]
3  [3-5]  [0-2]  [10-12]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-18 08:18:43

df是数据框架还是矩阵?名字让人联想到前者,但你描述它的方式却让人联想到后者。

如果它是一个矩阵:

代码语言:javascript
运行
复制
df2 <- cut(df, c(0, 2, 5, 9 12))
dim(df2) <- dim(df)

如果它是一个数据框:

代码语言:javascript
运行
复制
df[] <- lapply(df, cut, c(0, 2, 5, 9, 12))
票数 10
EN

Stack Overflow用户

发布于 2018-05-31 06:42:01

除了洪,他提出了一个很好的解决方案,我在ggplot2中发现了一些非常有用的东西:

cut_interval -使n组具有相等的范围

cut_number -使n个组具有大致相等的观察值

cut_width -使n组的宽度相等

在我看来,这些函数比基本剪切函数提供了更多的灵活性,并且更容易理解。请注意,这些函数返回因子而不是矩阵。

你可以使用类似这样的东西:

代码语言:javascript
运行
复制
df <- matrix(c(5,3,0,1,10,12,3,0,10), nrow=3)
m.df <- melt(df)
m.df$value <- cut_width(m.df$value, width=2, boundary=0)

这将返回

代码语言:javascript
运行
复制
   Var1 Var2   value
1    1    1   (4,6]
2    2    1   (2,4]
3    3    1   [0,2]
4    1    2   [0,2]
5    2    2  (8,10]
6    3    2 (10,12]
7    1    3   (2,4]
8    2    3   [0,2]
9    3    3  (8,10]

如果需要,您可以将其转换回一个方阵:

代码语言:javascript
运行
复制
df.bins <- acast(m.df, Var1~Var2)

最后给出:

代码语言:javascript
运行
复制
  1     2       3     
1 (4,6] [0,2]   (2,4] 
2 (2,4] (8,10]  [0,2] 
3 [0,2] (10,12] (8,10]
Levels: [0,2] (2,4] (4,6] (6,8] (8,10] (10,12]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8175887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档