小编Jil*_*ina的帖子

如何对三重嵌套循环进行矢量化?

我已经完成了类似的问题搜索,我对我应该做什么有一个模糊的想法:矢量化一切或使用apply()家庭.但我是R编程的初学者,上述两种方法都令人困惑.

这是我的源代码:

x<-rlnorm(100,0,1.6)
j=0
k=0
i=0
h=0
lambda<-rep(0,200)
sum1<-rep(0,200)
constjk=0
wj=0
wk=0
for (h in 1:200)
{
   lambda[h]=2+h/12.5
   N=ceiling(lambda[h]*max(x))
   for (j in 0:N)
   {
      wj=(sum(x<=(j+1)/lambda[h])-sum(x<=j/lambda[h]))/100
      for (k in 0:N)
      {
         constjk=dbinom(k, j + k, 0.5)
         wk=(sum(x<=(k+1)/lambda[h])-sum(x<=k/lambda[h]))/100
         sum1[h]=sum1[h]+(lambda[h]/2)*constjk*wk*wj
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

让我解释一下.我想收集200个sum1值(这是第一个循环),并且对于每个sum1值,它是总和(lambda[h]/2)*constjk*wk*wj,因此是其他两个循环.最乏味的是N随h变化,所以我不知道如何对j循环和k循环进行矢量化.但是当然我可以使用lambda<-seq()和矢量化h循环N<-ceiling(),这是我能做的最好的.有没有办法进一步简化代码?

r nested-loops

7
推荐指数
1
解决办法
1902
查看次数

如何将多个密度曲线叠加到R中的一个图中

我有一个看起来像这样的数据.

我打算在一个图中创建多个密度曲线,其中每个曲线对应于唯一ID.

我尝试使用"sm"包,使用此代码,但没有成功.

library(sm)
dat <- read.table("mydat.txt");
plotfn <- ("~/Desktop/flowgram_superimposed.pdf");
pdf(plotfn);

sm.density.compare(dat$V1,dat$V2, xlab = "Flow Signal")
colfill <- c(2:10);
legend(locator(1), levels(dat$V2), fill=colfill)

dev.off();
Run Code Online (Sandbox Code Playgroud)

请告知正确的方法是什么,或者是否有其他方法可以做到这一点?

我想在最后得到这种情节. 图http://img524.imageshack.us/img524/2736/testl.png

statistics plot r

6
推荐指数
1
解决办法
2万
查看次数

将char转换为日期时间

在data.frame中,我在表单中有一个日期时间戳:

head(x$time)
[1] "Thu Oct 11 22:18:02 2012" "Thu Oct 11 22:50:15 2012" "Thu Oct 11 22:54:17 2012"
[4] "Thu Oct 11 22:43:13 2012" "Thu Oct 11 22:41:18 2012" "Thu Oct 11 22:15:19 2012"
Run Code Online (Sandbox Code Playgroud)

每当我尝试将它转换为as.Date,lubridate动物园时,我都会得到NAs或错误.

将此时间转换为可读形式的方法是什么?

我试过了:

 Time<-strptime(x$time,format="&m/%d/%Y  %H:$M")
    x$minute<-parse_date_time(x$time)
    x$minute<-mdy(x$time)
    x$minute<-as.Date(x$time,"%m/%d/%Y %H:%M:%S")
    x$minute<-as.time(x$time)
    x$minute<-as.POSIXct(x$time,format="%H:%M")
    x$minute<-minute(x$time)
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
1
解决办法
2万
查看次数

在R中使用带有多个参数的匿名函数

我试图在数据框中生成新变量,这些变量以数据框中的两个(或更多)其他变量为条件.我相信R中的循环函数(即lapply,sapply等)对于此目的是有用且有效的.然而,根据我的方法,有些事情是不对的,我无法弄清楚是什么.

M <- data.frame(x=c("A", "A", "B", "B"), y=c(1,2,1,2))
Run Code Online (Sandbox Code Playgroud)

使用这个数据框,我想生成一个新的列z,包含如果是x == "A"和,则为TRUE的逻辑y == 1.以下代码是我能在这里得到的最好的代码,但似乎只是评估我的第一个条件.

M$z <- sapply(M$x, function(x,y) if((x == "A") && (y == 1)) T else F, M$y)
Run Code Online (Sandbox Code Playgroud)
  • 这个代码可以修复我的目的吗?
  • 有没有更好的方法在R中执行此操作,可能使用其他循环函数?

loops r anonymous-function dataframe

6
推荐指数
2
解决办法
4953
查看次数

在R中得到分数的分子和分母

使用fractions库MASS中的函数,我可以将小数转换为分数:

> fractions(.375)
  [1] 3/8
Run Code Online (Sandbox Code Playgroud)

但那么如何提取分子和分母呢?帮助fractions提到了一个属性"压裂",但我似乎无法访问它.

r fractions

6
推荐指数
1
解决办法
2963
查看次数

将数字转换为日期

我想将这种类型的数值转换为日期,但它不起作用.

20100727 例如

我试图将数字转换为字符并应用此:

as.Date("20100727", "Y%d%m")
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我能怎么做 ?

r type-conversion

6
推荐指数
1
解决办法
1万
查看次数

为什么r中的滞后不适用于矩阵?

我试图滞后矩阵:

> B = matrix( c(2, 4, 3, 1, 5, 7),  nrow=3, ncol=2)
> B
     [,1] [,2]
[1,]    2    1
[2,]    4    5
[3,]    3    7
> lag(B)
     [,1] [,2]
[1,]    2    1
[2,]    4    5
[3,]    3    7
Run Code Online (Sandbox Code Playgroud)

为什么不lag(B)给:

> lag(B)
     [,1] [,2]
[1,]    0    0
[2,]    2    1
[3,]    4    5
Run Code Online (Sandbox Code Playgroud)

r lag

6
推荐指数
1
解决办法
3314
查看次数

用于计算因子每个级别的 NA 值的函数

我有这个数据框:

set.seed(50)
data <- data.frame(age=c(rep("juv", 10), rep("ad", 10)),
                   sex=c(rep("m", 10), rep("f", 10)),
                   size=c(rep("large", 10), rep("small", 10)),
                   length=rnorm(20),
                   width=rnorm(20),
                   height=rnorm(20))

data$length[sample(1:20, size=8, replace=F)] <- NA
data$width[sample(1:20, size=8, replace=F)] <- NA
data$height[sample(1:20, size=8, replace=F)] <- NA

   age sex  size      length       width      height
1  juv   m large          NA -0.34992735  0.10955641
2  juv   m large -0.84160374          NA -0.41341885
3  juv   m large  0.03299794 -1.58987765          NA
4  juv   m large          NA          NA          NA
5  juv   m large -1.72760411          NA  0.09534935
6  juv   m large -0.27786453 …
Run Code Online (Sandbox Code Playgroud)

r missing-data plyr

6
推荐指数
1
解决办法
5602
查看次数

根据多个列条件R过滤行

假设我有一个包含100多列的数据集,我只需要保留数据中那些符合一个条件的行,这些行应用于所有100列.我该怎么做?

假设,它如下所示...我只需保留Col1或2或3或4中的任何一个> 0的行

Col1 Col2 Col3 Col4 
1 1 3 4 
0 0 4 2 
4 3 4 3 
2 1 0 2 
1 2 0 3 
0 0 0 0
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,除了最后一行之外,所有行都将成为它.我需要将结果放在与原始行相同的数据帧中.不确定我是否可以使用lapply循环遍历> 0的列或我可以使用子集..任何帮助表示赞赏

我可以使用列索引吗df<-subset(df,c(2:100)>0)?这不能给我正确的结果.

r subset multiple-columns

6
推荐指数
1
解决办法
1万
查看次数

ggplot2:关于列函数的faceting

无法找到答案 - 在ggplot2中,是否可以在列的函数上进行分析,而不是直接对列的值进行分析?

简单可重复的例子:

样本数据:

df=data.frame(dat=c(1,2,5,5,7))
Run Code Online (Sandbox Code Playgroud)

这有效:

ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid(dat ~ .)
Run Code Online (Sandbox Code Playgroud)

这不是:

ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid((dat > 3) ~ .)
Run Code Online (Sandbox Code Playgroud)

一种解决方案是为方面添加一列.这有效:

df$facet=df$dat>3
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid(facet ~ .)
Run Code Online (Sandbox Code Playgroud)

但有没有办法在不必向data.frame添加新列的情况下执行此操作?

r facet ggplot2

6
推荐指数
1
解决办法
215
查看次数