我有关于州级别批准评级的数据集.我需要将其中一个变量滞后两年.
数据是年度的,跨越1970年至2008年.显然,如果我滞后数据,我将失去一些观察(即:1970年将无法找到1968年的数据)我很好地失去了那些观察,但是diff命令当我试图滞后时返回错误.
但是,当我运行滞后时,我得到以下错误:替换与数据不匹配:
> df$lagvar <- diff(df$var, lag=2)
Error in `$<-.data.frame`(`*tmp*`, "lagvar", value = c(-0.4262501, :
replacement has 230 rows, data has 232
Run Code Online (Sandbox Code Playgroud)
我四处寻找,但无法找到解决方案.关于如何解决这个问题的任何想法?
我有以下两个数据帧:
>df1<-data.frame(A=c(0,0,0),B=c(0,201,0),C=c(0,467,0))
A B C
1 0 0 1
2 0 201 467
3 0 0 0
>df2<-data.frame(A=c(201,467),B=c('abc','def'))
A B
1 201 abc
2 467 def
Run Code Online (Sandbox Code Playgroud)
我想用df2中匹配的"B"值替换df1中的值,创建一个如下所示的数据帧:
A B C
1 NA NA NA
2 NA abc def
3 NA NA NA
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码逐列完成此操作:
>df2$B[match(df1$B,df2$A)]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我正在使用大量数据集,因此希望一次匹配所有列.任何帮助将非常感激.
我已经转移到一个新的服务器和安装R版本3.0上.(gplots库不再适用于2.14)
使用适用于版本2.14的脚本,我现在遇到生成热图的问题.
在R版本3中,我收到一个错误:
Error in lapply(args, is.character) : node stack overflow
Error in dev.flush() : node stack overflow
Error in par(op) : node stack overflow
Run Code Online (Sandbox Code Playgroud)
在R版本2.14中,我收到一个错误:
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Run Code Online (Sandbox Code Playgroud)
我可以通过增加选项(表达式= 500000)来解决
在R版本3中,增加此选项无法解决问题.我仍然坚持同样的错误.
两个脚本都是相同的:
y=read.table("test", row.names=1, sep="\t", header=TRUE)
hr <- hclust(dist(as.matrix(y)))
hc <- hclust(dist(as.matrix(t(y))))
mycl <- cutree(hr, k=7); mycolhc <- rainbow(length(unique(mycl)), start=0.1, end=0.9); mycolhc <- mycolhc[as.vector(mycl)]
install.packages("gplots")
library("gplots", character.only=TRUE)
myheatcol <- redgreen(75)
pdf("heatmap.pdf")
heatmap.2(as.matrix(y), Rowv=as.dendrogram(hr), Colv=as.dendrogram(hc), col=myheatcol,scale="none", density.info="none", trace="none", RowSideColors=mycolhc, labRow=FALSE)
dev.off()
Run Code Online (Sandbox Code Playgroud)
其中"test"是带有标题和行名称以及40*5000 0/1矩阵的tdl文件
任何帮助,将不胜感激 …
我想用来pmax计算矩阵的行方式最大值A:
A = matrix(sample(1:20),10,2)
pmax(A[,1],A[,2])
Run Code Online (Sandbox Code Playgroud)
这很好用.但问题是我不知道A的大小,所以调用pmax应该能够按列拆分矩阵并将每列作为参数提供.怎么做?例如,我可能在下一个例子中有
A = matrix(sample(1:20),5,4)
Run Code Online (Sandbox Code Playgroud)
但我不想每次都要手工改写
pmax(A[,1],A[,2],A[,3],A[,4])
Run Code Online (Sandbox Code Playgroud)
事实上,我不能因为A程序开始之前的大小是未知的.
我正在使用 plotrix 包来绘制圆圈。
而且我不明白我的代码有什么问题...... :-(
我有三分。第一个点(1,1)应该是圆的中心。以下两点(1,4),并(4,1)具有相同的距离/半径的中心。所以图中的圆圈应该经过这些点,对吧?
而且我不知道为什么圆圈看起来不对。有解释吗?
p1 <- c(1,1)
p2 <- c(4,1)
p3 <- c(1,4)
r <- sqrt(sum((p1-p2)^2))
plot(x=c(p1[1], p2[1], p3[1]),
y=c(p1[2], p2[2], p3[2]),
ylim=c(-5,5), xlim=c(-5,5))
draw.circle(x=p1[1], y=p1[2], radius=(r))
abline(v=-5:5, col="#0000FF66")
abline(h=-5:5, col="#0000FF66")
Run Code Online (Sandbox Code Playgroud)
在这里查看生成的输出
在给定具有多列的数据框的情况下,如何在R中以优雅的方式生成秩相关矩阵?我找不到内置函数,所以我尝试了
> test=data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))
> cor(rank(test))
Run Code Online (Sandbox Code Playgroud)
(为简单起见,只有2列,实际数据有5列)
> Error in cor(rank(test)) : supply both 'x' and 'y' or a matrix-like 'x'
Run Code Online (Sandbox Code Playgroud)
我认为这是因为rank需要一个向量.所以我试过了
> cor(lapply(test,rank))
Run Code Online (Sandbox Code Playgroud)
获取应用于数据框中每列的等级,将数据框视为列表,从而产生错误
> supply both 'x' and 'y' or a matrix-like 'x'
Run Code Online (Sandbox Code Playgroud)
我终于得到了一些合作的东西
> cor(data.frame(lapply(test,rank)))
x y
x 1 -1
y -1 1
Run Code Online (Sandbox Code Playgroud)
然而,这似乎相当冗长和丑陋.我认为必须有更好的方法 - 如果是这样的话?
正如标题所述,我需要根据另一个矩阵 (B) 中给出的列和行名称,将对称矩阵 (A) 中的值替换为 0。例如,
A <-matrix(c(0,1,2,3,4,1,0,1,2,3,2,1,0,1,2,3,2,1,0,3,4,3,2,3,0), 5)
colnames(A) <- rownames(A) <-c(LETTERS[1:5])
A
A B C D E
A 0 1 2 3 4
B 1 0 1 2 3
C 2 1 0 1 2
D 3 2 1 0 3
E 4 3 2 3 0
B <- matrix(c("A","B","C","B","D","E","E","C"),4)
B #reference matrix
[,1] [,2]
[1,] "A" "D"
[2,] "B" "E"
[3,] "C" "E"
[4,] "B" "C"
Run Code Online (Sandbox Code Playgroud)
我试过
A[B[,1],B[,2]]<-0 #for the above-diagonal half but it didn't work as …Run Code Online (Sandbox Code Playgroud) print(elasticband)
strech distance tension
1 67 148 5
2 98 120 10
3 34 173 15
4 50 60 20
5 45 263 25
6 42 141 30
7 89 166 35
Run Code Online (Sandbox Code Playgroud)
所以我有这个数据框,我希望能够改变单个列(例如,在张力列中对所有内容进行平方)而不影响其他像弹性带**2
有小费吗?
PS我对此并不太擅长,所以修复越简单越好
表达式和调用有什么区别?
例如:
func <- expression(2*x*y + x^2)
funcDx <- D(func, 'x')
Run Code Online (Sandbox Code Playgroud)
然后:
> class(func)
[1] "expression"
> class(funcDx)
[1] "call"
Run Code Online (Sandbox Code Playgroud)
eval使用环境列表调用对它们都有效。但是我很好奇这两个类有什么区别,在什么情况下我应该使用表达式或调用。
这是我的代码.该kum.loglik函数返回负对数似然,并采用两个参数a和b.我需要找到一个使用optim函数最小化此函数的a和b.(n1,n2,n3是预先指定的并传递给optim函数.
kum.loglik = function(a, b, n1, n2, n3) {
loglik = n1*log(b*beta(1+2/a,b)) + n2 * log(b*beta(1+2/a,b)-2*b*beta(1+1/a,b)+1) +
n3 * log(b*beta(1+1/a,b)-b*beta(1+2/a,b))
return(-loglik)
}
optim(par=c(1,1), kum.loglik, method="L-BFGS-B",
n1=n1, n2=n2, n3=n3,
control=list(ndeps=c(5e-4,5e-4)))
Run Code Online (Sandbox Code Playgroud)
此代码应该可以正常工作但它会给出错误消息
Error in b * beta(1 + 2/a, b) : 'b' is missing
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?
r ×10
matrix ×2
call ×1
diff ×1
expression ×1
heatmap ×1
lapply ×1
missing-data ×1
optimization ×1
plot ×1
plotrix ×1