【发布时间】:2019-12-08 18:07:04
【问题描述】:
我有两个文件。第一个文件是一个数据框,在一列中仅包含时间,而在一秒中包含个人
# [Time] [Individual]
# [1] 1528142 C5A1790
# [2] 1528142 C5A1059
# [3] 1528142 C5A1084
# [4] 1528142 C5A1564
# [5] 1528142 C5A1239
# [6] 1528142 C5A1180
第二个是 N X N 矩阵,其中行和列都是个体,包括第一个矩阵中的个体。
# [C5A1084] [C5A1059] [C5A1790] [C5A1180]
# 1 [C5A1084] 0 0.5 1 0
# 2 [C5A1059] 0.5 0 0 1
# 3 [C5A1790] 1 1 0 0.5
# 4 [C5A1180] 0 1 0.5 0
我需要创建一个向量,其中包含矩阵中的行号,我可以在该矩阵中从数据框中找到个人,并按照它们在数据框中列出的顺序。对于这些示例数据,它将是 (3,2,1,4)。
我尝试将which() 函数用作
RingIndex <- which(Matrix$IDcolumn == FrameIDs)
并收到“较长的对象长度不是较短对象长度的倍数”消息,大概是因为矩阵包含的个体比数据框多。 %in% 和 match() 也返回错误,指出替换的行数少于数据。
按照cmets中的建议,我尝试了
RingIndex <- which(Matrix$IDcolumn %in% FrameIDs)
其中成功返回了正确的行号,但按升序而不是原始数据的顺序。 match() 函数继续抱怨不同的替换和原始长度。
我可以使用什么方法来获取我的向量?
非常感谢!
【问题讨论】:
-
您能否提供一个可重现的两个矩阵示例?见此链接:stackoverflow.com/questions/5963269/…
-
那些是矩阵还是data.frames?区别是大。
class(data)返回什么? (data是这两个对象中的每一个。) -
我不确定您是否需要
for循环。which()应该返回满足某些逻辑语句的所有行。 -
@dc37 我已尝试提供我的数据示例。
-
@GKi 是的,我想终于解决了。