小编DJa*_*ack的帖子

合并两个数据帧,同时保持原始行顺序

我想合并两个数据帧,保持其中一个的原始行顺序(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)

sorting merge r dataframe

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

相同内存使用不同大小的矩阵

当我发现一些奇怪的东西时,我对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列的矩阵使用完全相同的内存.我们怎么解释呢?

memory size r matrix

21
推荐指数
3
解决办法
763
查看次数

从R中的jpeg图像中提取RGB通道

为了在R中对jpeg图像进行分类,我想获得每个像素的RGB值.

我的问题:有没有办法从R中的jpeg图像中提取RGB通道?

rgb jpeg r raster

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

如何计算R中矩阵的幂

我正在尝试计算以下矩阵的-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)

r matrix

10
推荐指数
3
解决办法
5763
查看次数

如何减少R中数组的维数

我有一个 4 维数组c(12000, 100, 20, 4),我想将两个维度合并为一个维度(第二个和第三个)以创建一个新的 3 维数组c(12000, 2000, 4)

当使用二维数组时,我使用的函数是as.vector,但我坚持使用更大的数组。有类似的功能apply吗?

谢谢

arrays merge r dimensions apply

5
推荐指数
1
解决办法
2070
查看次数

将子集函数应用于数据帧列表

我有一个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功能但不知道如何?

r list lapply dataframe

4
推荐指数
1
解决办法
7403
查看次数

出口png和pdf图之间的差异

我在Rstudio中输出我的情节有一个问题.当我以经典图像格式(png,jpg ...)导出绘图时,结果与我在pdf中尝试时的结果不一样.差异不是很大(不同的传说,覆盖......),但有点令人沮丧.有什么想法来解决这个问题吗?

pdf版本

png版

pdf plot png r

3
推荐指数
1
解决办法
199
查看次数

如何按组获取变量的所有最小值?

我有一个数据框:

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和它们的相关indexP.我可以做这个:

DT <- data.table(df)
DT[  ,.SD[which.min(var)], by = P]
Run Code Online (Sandbox Code Playgroud)

它只给出一个最小值var(第一个)P:

   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
Run Code Online (Sandbox Code Playgroud)

想法?

r minimum data.table

3
推荐指数
1
解决办法
109
查看次数

使用 igraph 在 R 中检测 Louvain 社区 - 边和顶点的格式

我有一个分数的相关矩阵,我想使用 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)

r cluster-analysis igraph

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

使用ggplot在同一图表上绘制两条回归线(在同一数据框的子集上计算)

我有这种数据框:

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)没有成功.

regression r ggplot2

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

如何使用变量作为矩阵坐标将数据帧转换为矩阵?

我有一个包含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)

有一个简单的方法可以做到这一点吗?

r matrix dataframe

0
推荐指数
1
解决办法
2095
查看次数

如何使用基于列/行名称的另一个矩阵替换矩阵中的值?

我有一个小矩阵:

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)

有任何想法吗 ?

replace r matrix

0
推荐指数
1
解决办法
847
查看次数