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