0

我确信我的问题有答案,但我似乎找不到一个有效的答案,而且我对 R 完全陌生,因此为冗余道歉!

所以我有一个庞大的数据集——17K obs 和 35 个变量。这是一个 txt 文件,我用 as.matrix 导入并强制转换。第一列具有字符值,其余 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 和性别。

> 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 ...`

例如。-

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

我要做的只是为第二个数据集中存在的那些 id(X37、X64 等)子集第一个数据集。

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

4

1 回答 1

2

第一条评论是关于您的陈述“第一列具有字符值,其余 34 列具有数值”。data_m是一个矩阵,所以所有的列都是相同的类型。在这种情况下,字符。您可以从str(). 将 R 中的矩阵视为排列在几列中的向量。

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

  1. fread()读取数据。包中 有一个很好的函数data.table可以从文本文件中读取数据作为data.table 对象:data_m <- fread("file.name.txt")
  2. 键入data_mby 变量idsetkey(data_m, id)
  3. data_maleids从:制作一个 id 向量ids <- sort(unique(data_maleids$id))
  4. 选择您需要的案例:data_m[id %in% ids]
于 2013-08-19T06:06:19.700 回答