首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用“`dplyr::rowwise`”标签的错误行为?

使用“`dplyr::rowwise`”标签的错误行为?
EN

Stack Overflow用户
提问于 2015-11-26 14:50:28
回答 1查看 300关注 0票数 3

R和使用dplyr时,我需要在一个列中使用非常量(而不是唯一) breaks来定义值,这些值是由同一数据帧的其他列中的值为每一行定义的。因此,我使用rowwise。虽然breaks似乎在功能上正常工作(即对每一行进行更新),但labels似乎并不一致。

例如:

代码语言:javascript
运行
复制
library(dplyr)
set.seed(10)
myDF = data.frame(a=runif(5, min=0.3, max=0.7), 
                  bmin = rep(0, 5), 
                  bmid = c(0.5, 0.3, 0.6, 0.7, 0.4),
                  bmax = rep(1, 5))

myDF %>% rowwise() %>% mutate(grp1 = cut(a, breaks=c(bmin, bmid, bmax)),
                              grp2 = cut(a, breaks=c(bmin, bmid, bmax), 
                                         labels=c(paste(bmin, bmid, sep='-'),
                                                  paste(bmid, bmax, sep='-'))),
                              grp3 = cut(a, breaks=c(bmin, bmid, bmax), 
                                         labels=c(1, 2)))

#           a  bmin  bmid  bmax    grp1   grp2   grp3
#       (dbl) (dbl) (dbl) (dbl)  (fctr) (fctr) (fctr)
# 1 0.3901746     0   0.5     1 (0,0.5]  0-0.5      1
# 2 0.4098122     0   0.3     1 (0.5,1]  0.5-1      2
# 3 0.4089220     0   0.6     1 (0,0.5]  0-0.5      1
# 4 0.5463317     0   0.7     1 (0,0.5]  0-0.5      1
# 5 0.4718686     0   0.4     1 (0.5,1]  0.5-1      2

在这个例子中,我们可以在第2行看到cut在功能上是正确的(例如,值0.3被正确地用作切点bmid而不是第一行中的0.5 ),但是结果标签是错误的(即(0.5, 1]实际上不包含值0.40981220.5确实不是切点)。

grp2是一种手动设置标签的尝试,但也失败了,这意味着手动breaks-independent解决方案(如grp3 )似乎是前进的唯一途径。

总之,rowwise似乎不适用于标签,但很好地适用于切点.

我有遗漏什么吗,还是这是一种错误的行为?我如何在逐行的基础上标注我的间隔时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 15:07:54

问题是,您正在尝试构建一个因子列,其中每一行都有不同的级别/标签。这在各种因素中是不可能的。mutate似乎试图协调所有的因素标签为您,这是产生这种奇怪的效果。它并不是cut()所独有的,请参见

代码语言:javascript
运行
复制
data.frame(z=c("a","b","c")) %>% rowwise() %>% mutate(g=factor(z))
#        z      g
#   (fctr) (fctr)
# 1      a      a
# 2      b      a
# 3      c      a

一种解决办法是返回字符值,而不是因子值。

代码语言:javascript
运行
复制
myDF %>% rowwise() %>% mutate(grp1 = as.character(cut(a, breaks=c(bmin, bmid, bmax))))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33941510

复制
相关文章

相似问题

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