【问题标题】:Distribute matrix by unique id column to new matrices按唯一 id 列将矩阵分配给新矩阵
【发布时间】:2014-01-19 01:19:51
【问题描述】:

说在 R 中,你有一个矩阵(一个小例子),它看起来像

      id  A  B  C
1     IN  5 12  3
2     DT  4 11  6
3     DT  7 11  6
4     GG  2  1  3
5     GG  4 11  5
6     IN  4  2  5

在这里,我们看到有 3 组 id(INDTGG),因此在这种情况下(在我的实际情况下为 18)我需要 3 个新矩阵(或具有 3 个的类矩阵?)。

我想将它们分开并做分开的线下事情发生的原因。谢谢

如果有帮助,可以使用一个“ids”向量;这里又是:

c("IN", "DT", "GG")

【问题讨论】:

  • 您确定它是matrix 而不是data.frame
  • 它可以是任何东西......不能......只是...... as.matrix() as.data.frame() .. 不是吗?
  • 好吧,如果它是一个矩阵,那么一切都将是一个“字符”。此外,将使用不同的技术来拆分这两种类型。
  • 太好了,最好的方法是......拥有 x 数据类型并执行......?

标签: r vector matrix


【解决方案1】:

以我们可以快速使用的格式发布您的数据通常很好(在您的对象上使用dput,以便我们可以剪切和粘贴),我在这里读到了您的数据:

df<-(read.table(textConnection('       id A  B  C
1     IN  5 12  3
2     DT  4 11  6
3     DT  7 11  6
4     GG  2  1  3
5     GG  4 11  5
6     IN  4  2  5'),header=TRUE))

如果是data.frame,你可以得到一个不错的列表:

split(df,df$id)
# $DT
#   id A  B C
# 2 DT 4 11 6
# 3 DT 7 11 6
# 
# $GG
#   id A  B C
# 4 GG 2  1 3
# 5 GG 4 11 5
# 
# $IN
#   id A  B C
# 1 IN 5 12 3
# 6 IN 4  2 5

但如果是矩阵,你可以这样做:

df.matrix<-as.matrix(df)
lapply(unique(df[,'id']),function(x) df.matrix[df.matrix[,'id']==x,])

【讨论】:

  • 谢谢,事实证明数据框法更适合我使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
相关资源
最近更新 更多