我想合并两个数据帧,保持其中一个的原始行顺序(df.2在下面的示例中).
以下是一些示例数据(class列中的所有值都在两个数据框中定义):
df.1 <- data.frame(class = c(1, 2, 3), prob = c(0.5, 0.7, 0.3))
df.2 <- data.frame(object = c('A', 'B', 'D', 'F', 'C'), class = c(2, 1, 2, 3, 1))
Run Code Online (Sandbox Code Playgroud)
如果我做:
merge(df.2, df.1)
Run Code Online (Sandbox Code Playgroud)
输出是:
class object prob
1 1 B 0.5
2 1 C 0.5
3 2 A 0.7
4 2 D 0.7
5 3 F 0.3
Run Code Online (Sandbox Code Playgroud)
如果我添加sort = FALSE:
merge(df.2, df.1, sort = F)
Run Code Online (Sandbox Code Playgroud)
结果是:
class object prob
1 2 A 0.7
2 …Run Code Online (Sandbox Code Playgroud) 当我发现一些奇怪的东西时,我对R中矩阵的内存使用感兴趣.在循环中,我使矩阵的列数增长,并为每个步骤计算对象大小,如下所示:
x <- 10
size <- matrix(1:x, x, 2)
for (i in 1:x){
m <- matrix(1, 2, i)
size[i,2] <- object.size(m)
}
Run Code Online (Sandbox Code Playgroud)
这使
plot(size[,1], size[,2], xlab="n columns", ylab="memory")
Run Code Online (Sandbox Code Playgroud)
似乎具有2行和5,6,7或8列的矩阵使用完全相同的内存.我们怎么解释呢?
为了在R中对jpeg图像进行分类,我想获得每个像素的RGB值.
我的问题:有没有办法从R中的jpeg图像中提取RGB通道?
我正在尝试计算以下矩阵的-0.5幂:
S <- matrix(c(0.088150041, 0.001017491 , 0.001017491, 0.084634294),nrow=2)
Run Code Online (Sandbox Code Playgroud)
在Matlab中,结果是(S^(-0.5)):
S^(-0.5)
ans =
3.3683 -0.0200
-0.0200 3.4376
Run Code Online (Sandbox Code Playgroud) 我有一个 4 维数组c(12000, 100, 20, 4),我想将两个维度合并为一个维度(第二个和第三个)以创建一个新的 3 维数组c(12000, 2000, 4)。
当使用二维数组时,我使用的函数是as.vector,但我坚持使用更大的数组。有类似的功能apply吗?
谢谢
我有一个SpatialPolygonDataFrame我可以同意dataframe这样的列表:
df.1 <- data.frame(A = c(1:10), B = c(1, 2, 2, 2, 5:10))
df.2 <- data.frame(A = c(1:10), B = c(1, 2, 2, 2, 2, 2, 7:10))
df.3 <- data.frame(A = c(1:10), B = c(1, 2, 2, 4:10))
list.df <- list(df.1, df.2, df.3)
Run Code Online (Sandbox Code Playgroud)
我想基于条件得到每个数据帧的子集列表(list.df.sub我正在寻找的结果):
df.1.sub <- subset(df.1, df.1$B != 2)
df.2.sub <- subset(df.2, df.2$B != 2)
df.3.sub <- subset(df.3, df.3$B != 2)
list.df.sub <- list(df.1.sub, df.2.sub, df.3.sub)
Run Code Online (Sandbox Code Playgroud)
我想直接申请我的子集list.df.我知道我必须使用lapply功能但不知道如何?
我在Rstudio中输出我的情节有一个问题.当我以经典图像格式(png,jpg ...)导出绘图时,结果与我在pdf中尝试时的结果不一样.差异不是很大(不同的传说,覆盖......),但有点令人沮丧.有什么想法来解决这个问题吗?


我有一个数据框:
df<-data.frame(P = c("A","A","A", "B","B","B", "C", "C", "C"),
index = c("ind1","ind2","ind3","ind1","ind2","ind3","ind1","ind2","ind3"),
var = c(2,1,1,8,5,4,2,8,6))
Run Code Online (Sandbox Code Playgroud)
我想获得每个值的所有最小值S var和它们的相关index值P.我可以做这个:
DT <- data.table(df)
DT[ ,.SD[which.min(var)], by = P]
Run Code Online (Sandbox Code Playgroud)
它只给出一个最小值var(第一个)P:
Run Code Online (Sandbox Code Playgroud)P index var 1: A ind2 1 2: B ind3 4 3: C ind1 2
而且我想:
Run Code Online (Sandbox Code Playgroud)P index var 1: A ind2 1 2: A ind3 1 2: B ind3 4 3: C ind1 2
想法?
我有一个分数的相关矩阵,我想使用 igraph 中的 Louvain 方法运行社区检测,在 R 中。我使用 将相关矩阵转换为距离矩阵cor2dist,如下所示:
distancematrix <- cor2dist(correlationmatrix)
这给出了一个 400 x 400 的 0-2 距离矩阵。然后,我使用http://kateto.net/networks-r-igraph(第 3.1 节)中的以下方法制作了边(距离)和顶点(400 个个体中的每一个)的列表。
library(igraph)
test <- as.matrix(distancematrix)
mode(test) <- "numeric"
test2 <- graph.adjacency(test, mode = "undirected", weighted = TRUE, diag = TRUE)
E(test2)$weight
get.edgelist(test2)
Run Code Online (Sandbox Code Playgroud)
然后我写了'from'和'to'边缘列表的csv文件,以及相应的权重:
edgeweights <-E(test2)$weight
write.csv(edgeweights, file = "edgeweights.csv")
fromtolist <- get.edgelist(test2)
write.csv(fromtolist, file = "fromtolist.csv")
Run Code Online (Sandbox Code Playgroud)
从这两个文件中,我生成了一个名为“nodes.csv”的 .csv 文件,其中包含 400 个人的所有顶点 ID:
id
1
2
3
4
...
400
Run Code Online (Sandbox Code Playgroud)
还有一个名为“edges.csv”的 .csv 文件,它详细说明了每个节点之间的“from”和“to”,并提供了每个边的权重(即距离度量):
from to weight
1 …Run Code Online (Sandbox Code Playgroud) 我有这种数据框:
df<-data.frame(x=c(1,2,3,4,5,6,7,8,9,10),y=c(2,11,24,30,45,65,90,110,126,145), a=c(0.2,0.2,0.3,0.4,0.1,0.8,0.7,0.6,0.8,0.9))
Run Code Online (Sandbox Code Playgroud)
使用ggplot,我想在同一图上绘制两条回归线,根据条件(a>或<0.5)计算我的数据帧的子集.
在视觉上,我想要两个回归线:
df_a<-subset(df, df$a<0.5)
ggplot(df_a,aes(x,y))+
geom_point(aes(color = a), size=3.5) +
geom_smooth(method="lm", size=1, color="black") +
ylim(-5,155) +
xlim(0,11)
Run Code Online (Sandbox Code Playgroud)

df_b<-subset(df, df$a>0.5)
ggplot(df_b,aes(x,y)) +
geom_point(aes(color = a), size=3.5) +
geom_smooth(method="lm", size=1, color="black") +
ylim(-5,155) +
xlim(0,11)
Run Code Online (Sandbox Code Playgroud)

出现在这个数字上:
ggplot(df,aes(x,y))+ geom_point(aes(color = a), size=3.5)
Run Code Online (Sandbox Code Playgroud)

我试过par(new=TRUE)没有成功.
我有一个包含3列的数据框:
df<-data.frame(x=c(1,1,1,2,2,2,2,3,3), y=c(1,2,3,1,2,3,4,1,2), percentage=c(50,25,25,15,35,25,25,55,45))
Run Code Online (Sandbox Code Playgroud)
看起来像:
x y percentage
1 1 1 50
2 1 2 25
3 1 3 25
4 2 1 15
5 2 2 35
6 2 3 25
7 2 4 25
8 3 1 55
9 3 2 45
Run Code Online (Sandbox Code Playgroud)
第三列表示x-ID对象(1 col)内y-ID对象(2 col)的面积百分比。
我想得到一个带有x和y的矩阵(或与smthg相关),它们定义了坐标/下标和“百分比”,即矩阵的元素。
基本上,我想得到一个像这样的矩阵:
1 2 3 4
1 50 25 25 0
2 15 35 25 25
3 55 45 0 0
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法可以做到这一点吗?
我有一个小矩阵:
SMALL<-matrix(c(1:9),3, 3)
colnames(SMALL)<-c("25","36","48")
rownames(SMALL)<-c("18","25","48")
Run Code Online (Sandbox Code Playgroud)
好像:
25 36 48
18 1 4 7
25 2 5 8
48 3 6 9
Run Code Online (Sandbox Code Playgroud)
还有一个大矩阵:
LARGE<-matrix(0,4, 4)
colnames(LARGE)<-c("12","25","36","48")
rownames(LARGE)<-c("18","25","38","48")
Run Code Online (Sandbox Code Playgroud)
好像:
12 25 36 48
18 0 0 0 0
25 0 0 0 0
38 0 0 0 0
48 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想用基于列/行名称的小矩阵替换大矩阵中的值.
寻找这个结果:
12 25 36 48
18 0 1 4 7
25 0 2 5 8
38 0 0 0 0
48 0 3 6 9
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?