【问题标题】:Having Numeric data type and character data type in the same column of a data frame?在数据框的同一列中具有数字数据类型和字符数据类型?
【发布时间】:2012-10-02 18:22:33
【问题描述】:

我在 R 中有一个大型数据框(570 行 x 200000 列)。对于那些熟悉 PLINK 的人,我正在尝试为 GWAS 分析创建一个 PED 文件。 Plink 要求每个缺失的字符用零编码。非缺失值为“A”、“T”、“C”或“G”。

因此,例如,数据结构在数据框中看起来像这样。

           COL1     COL2 
     PT1    A        T      
     PT2    T        T     
     PT3    A        A
     PT4    A        T        
     PT5    0        0
     PT6    A        A 
     PT7    T        A
     PTn    T        T

当我在 Plink 中运行我的文件时,我得到一个错误。我回去检查我在 R 中的文件,发现零是“字符”类型。 R 中的给定列中是否可以有两种不同的数据类型(数字和字符)?我尝试将 0 设为数字类型并将字母保持为字符类型,但它不会不工作。

【问题讨论】:

  • 当您导出文件时,您可能可以使用quote=FALSE 并获得您正在寻找的行为。
  • 假设 PT1..n 表示家​​庭 id,COL1 和 COL2 指的是 n 名患者中一个 snp 的基因型,我提出这些问题。您是否删除了文件中的标题行:COL1 和 COL2? PLINK 在创建 PED 文件时不喜欢标题。当您执行 assoc 程序时是否在 plink 中出现错误,或者当您尝试将问题中的列与个人 ID、父亲 ID、母亲 ID、性别和表型组合时出现错误。 ped 文件需要这些附加参数。
  • 嗨 Sathish - 是的,我删除了标题行,并且在添加基因型之前还包括了家庭 ID、个人 ID、父亲 ID、母亲 ID、性别和表型。我只是展示了基因型(第 7 列及以后的列)应该是什么样子的示例。当我尝试使用以下命令创建二进制 PED 文件时出现错误:plink --file data --make-bed --out data。错误是:错误:基因座“rs1003076”具有>2个等位基因:个体6 2具有基因型[“A”“G”]但我们已经看到[“0”]和[“A”]

标签: r dataframe types


【解决方案1】:

我认为 Justin 的建议可能会解决您在使用 Plink 时遇到的问题,但想以粗体字回答您的问题...

R 中的给定列中是否可以有两种不同的数据类型(数字和字符)?

不是真的,但在这种特殊情况下,当它是一个离散变量时,是的。在 R 中,您有 factor 基本类型,即其他一些语言中的枚举。

例如试试这个:

x = factor(c("0","A","C","G","T"),levels=c(0,"A","T","G","C"))
print(x)

[1] 0 A C G T
Levels: 0 A T G C

您可以将它们转换回整数(默认第一级为 1)和字符:

> as.integer(x)
[1] 1 2 5 4 3

> as.character(x)
[1] "0" "A" "C" "G" "T"

现在,当您使用 read.table 读取表格时,您可以指示所有字符类型都应作为因子读取,即使是那些带有引号的字符。

mydata = read.table("yourData.tsv",stringAsFactors=T);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2021-02-03
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多