Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >链接data.frame与矩阵

链接data.frame与矩阵
EN

Stack Overflow用户
提问于 2015-07-01 01:40:35
回答 2查看 669关注 0票数 2

我有一个data.frame和一个matrix,它们有相同的行和不同的列数。

matrix中的所有元素都是整数,但data.frame在某些列中包含字符。

我想链接这些文件的行,也就是说,如果我删除了matrix中的一行,那么data.frame中的同一行就会被自动删除,或者当我用它的一列对data.frame的元素排序时,矩阵中的元素就会相应地排序。

添加注意:我想保持matrix作为整数矩阵,所以我不能使用cbind

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 04:16:24

对此有(至少)两种解决方案。简单的选择是创建一个新的data.frame,其中包括这样的两行:

样本数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set.seed(123)
df <- data.frame(ID = 1:26, Group = sample(c("A", "B"), 26, TRUE))
mat <- matrix(rnorm(78), ncol = 3, dimnames = list(1:26, paste0("Val", 1:3)))

创建新的data.frame,存储矩阵列的名称以供以后参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_df <- cbind(df, mat)
mat_cols <- colnames(mat)

做一些补充:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_df <- new_df[seq(1, 25, 2), ]

在需要时将矩阵提取出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
as.matrix(new_df[, mat_cols])

另一种选择是使用S3或S4类。例如,生物导体包Biobase有一个ExpressionSet类,它可以保存matrix和表型数据,并且可以对两者进行子集(尽管矩阵具有相反的行和列)。

如果您想做得更简单一些(ExpressionsSet的实现可能比较复杂),下面是一个S3实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
as.JoinedUp <- function(data_frame, matrix) {
  stopifnot(is.data.frame(data_frame), is.matrix(matrix), nrow(data_frame) == nrow(matrix))
  x <- list(data_frame = data_frame, matrix = matrix)
  class(x) <- "JoinedUp"
  x
}
`[.JoinedUp` <- function(x, i = NULL, j = NULL) {
  if (is.null(i)) {
    i <- 1:nrow(x$data_frame)
  }
  if (is.null(j)) {
    j <- union(colnames(x$data_frame), colnames(x$matrix))
  }
  stopifnot(is.character(j))
  x$data_frame <- x$data_frame[i, intersect(j, colnames(x$data_frame)), drop = FALSE]
  x$matrix <- x$matrix[i, intersect(j, colnames(x$matrix)), drop = FALSE]
  x
}
`[<-.JoinedUp` <- function(x, i = NULL, j = NULL, value) {
  if (is.null(j)) {
    j <- union(colnames(x$data_frame), colnames(x$matrix))
  }
  if (is.null(i)) {
    i <- 1:nrow(x$data_frame)
  }
  stopifnot(is.character(j))
  if (!is.matrix(value) & !is.data.frame(value)) {
    value <- as.data.frame(t(value), stringsAsFactors = FALSE)
  }
  stopifnot(ncol(value) == length(j))
  if (any(j %in% colnames(x$data_frame))) {
    df_cols <- intersect(j, colnames(x$data_frame))
    x$data_frame[i, df_cols] <- value[, match(df_cols, j)]
  }
  if (any(j %in% colnames(x$matrix))) {
    mat_cols <- intersect(j, colnames(x$matrix))
    x$matrix[i, mat_cols] <- data.matrix(value[, match(mat_cols, j)])
  }
  x
}

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_obj <- as.JoinedUp(df, mat)
new_obj[1:3, ]
new_obj[, c("ID", "Val1")]
new_obj[10:15, ]$matrix
new_obj <- new_obj[order(new_obj$matrix[, "Val1"]), ]
new_obj[1:5, c("ID", "Val1")] <- data.frame(ID = 20:24, Val1 = 0)

这只是您需要的一个框架;您可能还想为dimnrowncol等定义方法。

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 01:57:42

试试这个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#dummy data
set.seed(123)
df1 <- data.frame(ID=1:3, x=letters[1:3])
m1 <- matrix(c(1:3,runif(6)), ncol=3)

#cbind data.frame and matrix, results in a data.frame object
res <- cbind(df1, m1)
res
#   ID x 1         2         3
# 1  1 a 1 0.2875775 0.8830174
# 2  2 b 2 0.7883051 0.9404673
# 3  3 c 3 0.4089769 0.0455565

#subset 2nd row
res[ 2,]
#   ID x 1         2         3
# 2  2 b 2 0.7883051 0.9404673

#order by 4th column
res[ order(res[ ,4 ]), ]
  # ID x 1         2         3
# 1  1 a 1 0.2875775 0.8830174
# 3  3 c 3 0.4089769 0.0455565
# 2  2 b 2 0.7883051 0.9404673
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31157791

复制
相关文章
R语言 list与data.frame转换
背景:下载某数据库的数据做数据分析,发现下载的数据结构是多层list嵌套,与平时遇到的数据表(data.frame)不同,并且第二层list的名称是本人需要的变量。
拴小林
2022/04/18
3.1K0
R语言 list与data.frame转换
硬链接与符号链接
【5】+5120M 表示这个主分区大小是5120M = 5G, 我们把这个10G的磁盘先拿出来5G作为第一个主分区
书唐瑞
2022/06/02
2.3K0
硬链接与符号链接
矩阵转置与矩阵相乘[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说矩阵转置与矩阵相乘[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/06/19
4.6K0
矩阵转置与矩阵相乘[通俗易懂]
矩阵转置与矩阵相乘
写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度 2017 校招的笔试(C++岗),里面就有一道矩阵转置后相乘的在线编程题。考虑到日后笔试可能会用到,特此记录,也希望能够帮助到需要的网友。
全栈程序员站长
2022/07/04
7470
矩阵转置与矩阵相乘
C++编译与链接(2)-浅谈内部链接与外部链接
发现每次写技术博客时,都会在文章开头处花费一番功夫 ...从前,有一个程序员....他的名字叫magicsoar 为什么有时会出现aaa已在bbb中重定义的错误? 为什么有时会出现无法解析的外部符号?
magicsoar
2018/02/06
4K2
C++编译与链接(2)-浅谈内部链接与外部链接
矩阵转置与矩阵相乘
写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度2017校招的笔试(C++岗),里面就有一道矩阵转置后相乘的在线编程题。考虑到日后笔试可能会用到,特此记录,也希望能够帮助到需要的网友。
恋喵大鲤鱼
2018/08/03
3.1K0
矩阵转置与矩阵相乘
Linux硬链接与软链接
可以使用ln 源文件 新文件 命令建立硬链接或者使用ln -d 源文件 新文件 命令建立硬链接。
Marigold
2022/06/17
8.7K0
Linux硬链接与软链接
Linux硬链接与软链接
在Linux中,连接文件有两种,一种类似于Windows的快捷方式,可以让你快速地链接到目标文件(或目录),这种称为软链接(soft link),也叫作符号链接(symbolic link);另一种则是通过文件系统的 inode 连接来产生新文件名,而不是产生新文件。这种称为硬链接(hard link),也叫作实体链接。 软链接与硬链接是两种完全不一样的东西。
恋喵大鲤鱼
2019/03/04
23.4K1
Linux硬链接与软链接
Numpy与矩阵
请注意,本文编写于 980 天前,最后修改于 980 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.4K0
Numpy与矩阵
编码生成矩阵与检错监督矩阵
(n,k )线性分组码的构造——依据给定的 k 个信息码元,设计满足编码条件(最小码距、码率)的 n-k个监督码元。
timerring
2023/06/16
5930
编码生成矩阵与检错监督矩阵
正定矩阵与半正定矩阵定义性质与理解
在线性代数里,正定矩阵 (positive definite matrix) 有时会简称为正定阵。 定义: A A是n阶方阵,如果对任何非零向量xx,都有 xTAx>0 x^TAx> 0,其中 xT x^T 表示 x x的转置,就称AA正定矩阵。
大鹅
2021/06/16
3.7K0
Linux之硬链接与软链接
2、在Linux中,元数据中的inode号(inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)才是文件的唯一标识而不是文件名。(例如对一个文件重命名(mv)但inode号仍相同)。
CoreDao
2021/04/13
7.6K0
Linux之硬链接与软链接
软链接与硬链接的区别
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
233333
2018/12/24
1.7K0
软链接与硬链接的区别
邻接矩阵与关联矩阵「建议收藏」
定义: 设无向图 G=(V,E) G = ( V , E ) G=(V,E),其中顶点集 V=v1,v2,...,vn V = v 1 , v 2 , . . . , v n V={v_1,v_2,...,v_n},边集 E=e1,e2,...,eε E = e 1 , e 2 , . . . , e ε E={e_1,e_2,...,e_\varepsilon}。用 aij a i j a_{ij}表示顶点 vi v i v_i与顶点 vj v j v_j之间的边数,可能取值为0,1,2,…,称所得矩阵 A=A(G)=(aij)n×n A = A ( G ) = ( a i j ) n × n \mathbf A=\mathbf A(G)=(a_{ij})_{n\times n}为图G的邻接矩阵
全栈程序员站长
2022/11/17
9050
邻接矩阵与关联矩阵「建议收藏」
独家|OpenCV 1.3 矩阵的掩膜操作(附链接)
翻译:陈之炎 校对:王可汗、林夕 本文约1600字,建议阅读5分钟本文为大家介绍了 OpenCV 矩阵的官方教程。 矩阵的掩膜操作(mask)并不难。主要思路为:根据掩膜矩阵(也称为内核kernel)重新计算图像中每个像素的值。利用掩膜矩阵调整相邻像素对当前像素值的影响。从数学的角度来看,即是利用特定的权重值,对像素做一个加权平均。 测试案例 来看一下如何增强图像对比度的示例,按照以下公式重新计算图像各个像素: 第一种是利用公式做计算,而第二种是第一种使用mask来计算的简化版本。需要计算的像素对准掩膜矩
数据派THU
2023/03/29
6630
独家|OpenCV 1.3 矩阵的掩膜操作(附链接)
Operating System 10 - 硬链接与软链接
在Linux中文件被分为用户数据(user data)与元数据(metadata).
Reck Zhang
2021/08/11
5260
Operating System 10 - 硬链接与软链接
矩阵求导与实例
缘由 布局 求导的类别 从简单的例子说起 实例 SVM的对偶形式转换 Soft-SVM对偶形式转换 线性回归 logistic回归 参考资料 缘由 机器学习的很多算法表示中都采用了矩阵的形式,对算法的
用户1147754
2018/01/02
9330
C++编译与链接(1)-编译与链接过程
大家知道计算机使用的一系列的1和0 那个一个C++语言程序又是如何从一个个.h和.cpp文件变成包含1和0的可执行文件呢? 可以认为有以下的几个环节 源程序->预处理->编译和优化->生成目标文件->链接->可执行文件 1.预处理 C++的预处理是指在C++程序源代码被编译之前,由预处理器对C++程序源代码进行的处理。这个过程并不对程序的源代码进行解析。 这里的预处理器(preprocessor)是指真正的编译开始之前由编译器调用的一个独立程序。 预处理器主要负责以下的几处 1.宏的替换 2.删除注释 3.
magicsoar
2018/02/06
1.3K0
C++编译与链接(1)-编译与链接过程
Linux中的硬链接与软链接?
硬链接:在一个文件里面,对于目录来说,记录着文件的名字和inode号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号,是文件的唯一标识),我们也可以在多个目录里记录相同的inode号,它们的名字不一定相同,但只要inode号一样就行,它们最终都链接到一个文件里,这就是硬链接。也就是说,当文件的硬链接数被目录记录了一次,文件的硬链接数就增加了一次。所以,文件只要在目录里存在,它就至少有一个硬链接。
用户4877748
2020/07/21
4.3K0
Linux软链接与硬链接实战解析
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
公众号guangcity
2019/09/20
6.2K0
Linux软链接与硬链接实战解析

相似问题

R矩阵与data.frame混合

11

从data.frame到矩阵

21

Matlab中矩阵运算与索引的链接

11

使用整数矩阵子设置data.frame

50

从3个矩阵创建data.frame

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文