gpt4 book ai didi

r - 使用 `cut` 的 `dplyr::rowwise` 标签的错误行为?

转载 作者:行者123 更新时间:2023-12-02 03:42:52 25 4
gpt4 key购买 nike

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

例如:

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 code> 从第一行开始),但生成的标签是错误的(即 (0.5, 1] 实际上不包含值 0.40981220.5 确实不是切入点)。

grp2 是手动设置标签的尝试,也失败了,这意味着 grp3 中的手动中断独立解决方案似乎是前进的唯一出路...

简而言之,rowwise 似乎不适用于标签,但适用于切点...

我错过了什么,还是这是错误的行为?如何按行标记间隔?

最佳答案

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

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

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

myDF %>% rowwise() %>% mutate(grp1 = as.character(cut(a, breaks=c(bmin, bmid, bmax))))

关于r - 使用 `cut` 的 `dplyr::rowwise` 标签的错误行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com