我已经完成了类似的问题搜索,我对我应该做什么有一个模糊的想法:矢量化一切或使用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(),这是我能做的最好的.有没有办法进一步简化代码?
我有一个看起来像这样的数据.
我打算在一个图中创建多个密度曲线,其中每个曲线对应于唯一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
在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中的循环函数(即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)
使用fractions库MASS中的函数,我可以将小数转换为分数:
> fractions(.375)
[1] 3/8
Run Code Online (Sandbox Code Playgroud)
但那么如何提取分子和分母呢?帮助fractions提到了一个属性"压裂",但我似乎无法访问它.
我想将这种类型的数值转换为日期,但它不起作用.
20100727 例如
我试图将数字转换为字符并应用此:
as.Date("20100727", "Y%d%m")
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我能怎么做 ?
我试图滞后矩阵:
> 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) 我有这个数据框:
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) 假设我有一个包含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)?这不能给我正确的结果.
无法找到答案 - 在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 ×10
dataframe ×1
facet ×1
fractions ×1
ggplot2 ×1
lag ×1
loops ×1
missing-data ×1
nested-loops ×1
plot ×1
plyr ×1
statistics ×1
subset ×1