在R中转置和合并数据集

时间:2013-08-19 05:47:43

标签: r subset

我确信我的问题有答案,但我似乎无法找到一个可行的,而且对于R来说我是绝对新的,所以请求冗余!

所以我有一个巨大的数据集 - 17K obs有35个变量。这是一个txt文件,我导入并强制执行as.matrix。第1列包含字符值,其余34列具有数值。

结构 -

>str(data_m)
 chr [1:17933, 1:35] "RAB12" "TRIM52" "C1orf86" "PLAC9" "MORN3" "LOC643783" "LOC389541" "OAZ2" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:35] "Name" "X118" "X12" "X21" ...

现在还有另一个包含2列的小型长格式数据集--id和gender。

> str(data_maleids)
'data.frame':   24 obs. of  2 variables:
 $ id    : Factor w/ 34 levels "X118","X12","X21",..: 8 23 9 19 10 7 5 4 2 30 ...
 $ gender: Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...`

EG。 -

    row.names   id  gender
1   1           X37 male
2   2           X64 male

我想要做的只是将第一个数据集的子集仅用于第二个数据集中存在的那些ID(X37,X64等)。

我尝试转置更大的数据集但是这给了我列名称方面的问题,我似乎无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

第一条评论是关于你的陈述“第一列有字符值,其余34列有数值”。 data_m是一个矩阵,因此所有列都属于同一类型。在这种情况下的角色。您可以从str()的输出中看到它。将R中的矩阵想象成一个排列在几列中的向量。

其次,我建议你使用data.table包(如果你还没有它,你必须安装它)来完成这项任务。语法草图将是这样的:

  1. 读入数据。中有一个很好的函数fread() data.table包用于将文本文件中的数据作为data.table读取 对象:data_m <- fread("file.name.txt")
  2. 按变量data_m键入idsetkey(data_m, id)
  3. data_maleidsids <- sort(unique(data_maleids$id))
  4. 制作一个ID向量
  5. 选择您需要的案例:data_m[id %in% ids]