使用R反转统计模式

时间:2017-09-04 14:13:09

标签: r

我正在尝试将模式数据与包含2列(XY)的源数据进行匹配。它的工作原理如下。 “模式”中的每个元素都是'获得X中5个连续数的统计模式。前5个数字为' 312'。同样地,319是接下来的5个数字的模式,依此类推。我需要将模式值312与前5个数字中的最后一个匹配,然后取相应的Y值。其中:400312225319325315

输入:

Mode <- c(312,319, 315)

Source Data (2 columns X and Y): 
X   311 312 314 312 315 317 319 319 319 311 325 320 315 315 310

Y   100 200 300 400 500 300 450 375 225 300 445 455 345 325 256
Output: 400, 225, 325

2 个答案:

答案 0 :(得分:1)

我不知道任何内置函数正是这样做的(它似乎是一个相当小的需求),但基本功能的组合可以完成这项工作,&amp;你甚至不需要单独计算模式。

数据样本:

X <- c(311, 312, 314, 312, 315, 
       317, 319, 319, 319, 311, 
       325, 320, 315, 315, 310)

Y <- c(100, 200, 300, 400, 500, 
       300, 450, 375, 225, 300, 
       445, 455, 345, 325, 256)

DF <- data.frame(X, Y)

功能:

myFun <- function(DF){
  X <- matrix(DF[,1], ncol = 5, byrow = T)
  Y <- matrix(DF[,2], ncol = 5, byrow = T)
  LastPosition <- apply(X, 1, function(x){max(which(x == sort(unique(x))[which.max(table(x))]))})
  unlist(lapply(seq_along(LastPosition), function(i){Y[i, LastPosition[i]]}))
}

> myFun(DF)
[1] 400 225 325

答案 1 :(得分:0)

您的数据

Mode <- c(312,319, 315)
# Using Z.Lin's data
X <- c(311, 312, 314, 312, 315, 
       317, 319, 319, 319, 311, 
       325, 320, 315, 315, 310)
Y <- c(100, 200, 300, 400, 500, 
       300, 450, 375, 225, 300, 
       445, 455, 345, 325, 256)
DF <- data.frame(X, Y)

溶液

library(dplyr)
ans <- DF %>%
         filter(X %in% Mode) %>%
         group_by(X) %>%
         do(tail(.,1))

#       X     Y
#   <dbl> <dbl>
# 1   312   400
# 2   315   325
# 3   319   225 

ans$Y
# [1] 400 325 225