R'合并'正在改变合并数据帧中的数据

时间:2014-06-17 16:25:00

标签: r merge

我在R中使用merge命令时遇到了一些问题,我正在尝试将值放入bin中,然后我可以将其用作绘图的颜色值。我想保留分位数bin值作为图例使用,所以我也将它合并回原始数据帧。

我遇到的问题是,当我这样做时,当我将分位数合并回原始数据帧以创建新的数据帧时,原始值会发生变化。我可能正在做一些明显错误的事情,但是现在已经玩弄了这个问题一段时间并且搜索“合并正在改变数据”并没有返回任何关于无意识的“改变数据”类型的东西我遇到了麻烦。谢谢!

# create random data
x=rnorm(100,100,25)
x=as.data.frame(x)

# create bins to place the data in
quantiles=quantile(x,c(seq(.05,.95,.05)))
quantiles=as.data.frame(quantiles)

# create bin number to merge upon later
quantiles$binnumber=c(1:dim(quantiles)[1])

# create bin number in x to merge upon later
x$binnumber=tapply(x$x,cut(x$x,quantiles$quantiles))

merged=merge(x,quantiles,by="binnumber")

# should work right? note the difference in summary,
# it seems the high and low values got changed
# somehow while the middle values did not.

summary(x$x)

  Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 39.35   83.15   95.67   98.92  116.30  190.80 

summary(merged$x)

  Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 60.62   84.46   95.67   97.92  114.20  136.40 

1 个答案:

答案 0 :(得分:3)

我认为你的问题是

x$binnumber = tapply(x$x,cut(x$x,quantiles$quantiles))

请注意,这会导致x$binnumber中的NA值。这是因为quantiles$quantiles仅上升到.95分位数,并且有x以上的值。由于这些值超出了您指定的中断范围,因此将它们设置为NA。当你在binnumber上合并时,你无法合并NA值。

你可以通过使分位数变为1

来解决这个问题
quantiles <- quantile(x,c(seq(.05,1.00,.05)))

并包括低于切割中最低分位数的所有值

x$binnumber <- tapply(x$x,cut(x$x,c(-Inf, quantiles$quantiles)))

这样做可以为您提供匹配的值

summary(merged$x)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   43.34   83.46  105.30  102.60  121.20  170.50 

summary(x$x)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   43.34   83.46  105.30  102.60  121.20  170.50