首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >data.frame (或表格)中的保留范围

data.frame (或表格)中的保留范围
EN

Stack Overflow用户
提问于 2013-09-10 06:23:41
回答 3查看 76关注 0票数 5

我想这么做

代码语言:javascript
复制
set.seed(667) 
df <- data.frame(a = sample(c(c(4,7),11,NA),  10, rep = TRUE), 
                 b = sample(c(1, 2, 3, NA, 5, 6),  10, rep=TRUE), 
                 c = sample(c(11, 12, 13, 14, 15, 16),  10, rep=TRUE))

但不是得到这个,

代码语言:javascript
复制
df
    a  b  c
1   4 NA 12
2   7  6 12
3  NA NA 14
4  11  1 16
5  NA  2 14
6  NA  3 13
7  11 NA 13
8  NA  6 15
9   7  3 16
10  7  5 16

我想要得到这样的东西,在某些点上我有一个范围,

代码语言:javascript
复制
    a  b  c
1  4-7 NA 12
2  4-7  6 12
3  NA  NA 14
4  11   1 16
5  NA   2 14
6  NA   3 13
7  11  NA 13
8  NA   6 15
9  4-7  3 16
10 4-7  5 16

我感到困惑和疲惫,并寻求帮助。

阅读SimonO101在2013-09-09 22:30:14Z的评论后更新

我想我的问题也可以这样表述,我想要这个数据框架

代码语言:javascript
复制
data.frame(A = c(4:7, 9),B = c(1,2))

就像这样

代码语言:javascript
复制
  A   B
1 4:7 9
2   2 2
EN

回答 3

Stack Overflow用户

发布于 2013-09-10 06:56:39

也许你想要这个?

代码语言:javascript
复制
library(data.table)

d = data.table(A = list(c(4,7), 9),B = c(1,2))
#     A B
#1: 4,7 1
#2:   9 2

另一种可能性是存储未计算的表达式(它真的不清楚OP想要什么,所以我在这里只是在摸索):

代码语言:javascript
复制
d = data.table(A = list(quote(4:7), 9), B = c(1,2))
#        A B
#1: <call> 1
#2:      9 2
d[,A]
#[[1]]
#4:7
#
#[[2]]
#[1] 9
lapply(d[, A], eval)
#[[1]]
#[1] 4 5 6 7
#
#[[2]]
#[1] 9
票数 3
EN

Stack Overflow用户

发布于 2013-09-10 06:30:58

您可以使用cut将值转换为您喜欢的任何间隔,还可以为每个间隔设置适当的标签,如下所示:

代码语言:javascript
复制
newdf <- sapply( df , cut , breaks = c(1:4,7.01,8:16) , labels = c(1:3,"4-7",8:16) , right = TRUE )
#      a     b     c   
# [1,] "3"   NA    "12"
# [2,] "4-7" "4-7" "12"
# [3,] NA    NA    "14"
# [4,] "11"  NA    "16"
# [5,] NA    "1"   "14"
# [6,] NA    "2"   "13"
# [7,] "11"  NA    "13"
# [8,] NA    "4-7" "15"
# [9,] "4-7" "2"   "16"
#[10,] "4-7" "4-7" "16"
票数 1
EN

Stack Overflow用户

发布于 2013-09-10 06:53:12

您到底想要对这些范围做什么?

一个简单的选择是将每列替换为2列,第一列是最小列,第二列是最大列(因此您可以使用a.min、a.max、b.min等)。您可以通过让最大值为NA或通过让最小值和最大值相同来表示精确值。

另一种选择是创建一个存储为列表的新对象,其中每一行都是长度为1(精确值)或长度为2(范围)的向量。为你的对象编写一个format方法,创建一个单值或范围(例如4-7)的字符向量,当你打印数据框时,它会调用format函数,并最终打印出如上图所示的内容。无论您打算以何种方式处理此数据,您都需要其他方法来处理这些列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18707995

复制
相关文章

相似问题

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