我在R中有一个矩阵,我想从每一行中取一个随机样本.我的一些数据是在NA中,但在采用随机样本时,我不希望NA作为采样的选项.我怎么做到这一点?
例如,
a <- matrix (c(rep(5, 10), rep(10, 10), rep(NA, 5)), ncol=5, nrow=5)
a
[,1] [,2] [,3] [,4] [,5]
[1,] 5 5 10 10 NA
[2,] 5 5 10 10 NA
[3,] 5 5 10 10 NA
[4,] 5 5 10 10 NA
[5,] 5 5 10 10 NA
Run Code Online (Sandbox Code Playgroud)
当我将样本函数应用于此矩阵以输出另一个矩阵时,我得到了
b <- matrix(apply(a, 1, sample, size=1), ncol=1)
b
[,1]
[1,] NA
[2,] NA
[3,] 10
[4,] 10
[5,] 5
Run Code Online (Sandbox Code Playgroud)
相反,我不希望NA能够作为输出,并希望输出类似于:
b
[,1]
[1,] 10
[2,] 10
[3,] 10
[4,] 5 …Run Code Online (Sandbox Code Playgroud) 我有一个类似于以下的data.frame:
df <- data.frame(population = c("AA","AA","AA","BB","BB","CC","CC","CC"),
individual = c("A1","A2","A3","B1","B2","C1","C2","C3"),
Haplotype1 = rep(1:4,2),
Haplotype2 = rep(5:8,2))
> df
population individual Haplotype1 Haplotype2
1 AA A1 1 5
2 AA A2 2 6
3 AA A3 3 7
4 BB B1 4 8
5 BB B2 1 5
6 CC C1 2 6
7 CC C2 3 7
8 CC C3 4 8
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据集,其中从数据集中省略由少于指定数量的个体组成的任何群体.例如,我想重新分析只有三个或三个以上人群的数据.以下是我想要的数据集:
> df <- df[!df$population=="BB",]
> df
population individual Haplotype1 Haplotype2
1 AA A1 1 5
2 AA A2 …Run Code Online (Sandbox Code Playgroud) 我有关于州级别批准评级的数据集.我需要将其中一个变量滞后两年.
数据是年度的,跨越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程序开始之前的大小是未知的.
我在R中使用包arules来生成关联规则.我想限制规则,以便在左侧只有一个特定的元素,让我们称之为"potatoe".
如果我这样做:
rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf =
0.9,target="rules"), appearance = list(lhs = c("potatoe")))
Run Code Online (Sandbox Code Playgroud)
我在lhs上得到"potatoe",但也包括所有其他类型的东西.如何强制规则只包含一个元素?参数maxlen没有做我想要的,因为,据我所知,我不能指定应用于左边元素的maxlen.
我有一个0对角线对称矩阵X,例如
[1] [2] [3] [4] [5]
[1] 0.00000000 0.07065048 0.1019865 0.23641082 0.23641082
[2] 0.07065048 0.00000000 0.0000000 0.23641082 0.23641082
[3] 0.10198654 0.00000000 0.0000000 0.00000000 0.23641082
[4] 0.23641082 0.23641082 0.0000000 0.00000000 0.08870087
[5] 0.23641082 0.23641082 0.2364108 0.08870087 0.00000000
Run Code Online (Sandbox Code Playgroud)
我需要根据第二个矩阵Y用0替换它的一些元素:
[1] [2]
[1] 3 2
[2] 4 3
[3] 1 2
Run Code Online (Sandbox Code Playgroud)
因此X [3,2],X [4,3],X [1,2]和对称性的X [2,3],X [3,4],X [2,1]应该被替换零的.
我想出了这个解决方案:
for (i in 1:nrow(Y)) {
X[Y[i,1], Y[i,2]] <- 0
X[Y[i,2], Y[i,1]] <- 0
}
Run Code Online (Sandbox Code Playgroud)
这是诀窍,但我想知道是否有更好,更有效的方法来使用类似应用的函数进行编码.
非常感谢您的关注.
我正在尝试使用一种功能,使用逻辑曝光链接功能模拟鸟类的嵌套成功.
当我使用R 3.0.0或3.0.1中的上面的示例代码运行此函数时,我收到错误:
Error in .Call("logit_mu_eta", eta, PACKAGE = "stats") :
"logit_mu_eta" not available for .Call() for package "stats"
Run Code Online (Sandbox Code Playgroud)
但是,它在R 2.15.3中工作正常.
我希望这可以在更新版本的R中使用,因为我使用它们来进一步分析输出.如果有人有任何建议,解决方法或更正,我很乐意尝试.
我正在shapiro.test()R 中使用来测试数据集的正态性。我想从中提取 w 统计量和 p 值,以便我可以在某个地方使用它。是否可以?我怎样才能做到这一点?