拆分整数和非整数,得到均值或中位数

时间:2016-04-18 06:31:29

标签: r

我通过rnorm(n)获得n个随机变量,并通过以下数字获得n个数字:

sample (1:100, n, replace = T)

我连接这两个数据,以便我有2n个随机变量(= x)

问题是make函数(函数的名称是mysplit)将数据拆分为整数和非整数并得到每个均值或中位数(可选)

我想我应该使用函数split或tapply但我不知道如何将数据拆分为整数和非整数

如果有像

这样的可选部分,我该如何设置可选功能(中位数)
mysplit(x,n,method = "median")

2 个答案:

答案 0 :(得分:3)

我们可以使用split

 lapply(split(v1, grepl("\\.", v1)), mean)

如果我们需要一个功能

mysplit <- function(x, n, method = "median"){
   lst <- split(x, grepl("\\.", x))
   lapply(lst, method)
 }

 mysplit(v1, 2, "median")

数据

 v1 <- c(1, 2.3, 4.5, 3)

答案 1 :(得分:0)

我假设您的分页数据看起来像数据d:

 d<-data.table(y=as.vector(rbind(rnorm(100),seq(1.0:100.0))))

现在,拆分功能是

splitit<-function(d,m)
{
  print(m)
 dd<-data.table(x=d[!(y%%1==0),],n=d[y%%1==0,])
 if(as.numeric(m)==1){ddd<-data.table(mx=mean(dd$x),mn=mean(dd$n))}
 if(as.numeric(m)==0){ddd<-data.table(mx=median(dd$x),mn=median(dd$n))}
 return(ddd)
}

c<-splitit(d,1)

输出:

> c
    mx   mn
1: 0.05145718 50.5
> c<-splitit(d,1)
[1] 1
> c
        mx   mn
   1: -0.05396085 50.5

这应该有帮助!