我在R中有一个大数据框(570行乘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设为数字类型,并将字母保留为字符类型,但它赢得了'工作。
答案 0 :(得分:2)
我认为贾斯汀的建议可能会解决你对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);