我将两个.csv文件导入R.既不包含任何空值或NULL值,也不包含任何“NA”字符串。
df1 <- read.csv("df1.csv")
df2 <- read.csv("df2.csv")
他们看起来都像这样,确切的列名:
> head(df1)
Chrom Position Gene.Sym Target.ID Type Zygosity Genotype Ref
1 chr10 99219404 MMS19 MMS19_104345.9376 DEL Het TG/T TG
2 chr2 109411248 CCDC138 CCDC138_27210.755 DEL Het GAATAT/G GAATAT
3 chr22 50687970 HDAC10 HDAC10_192036.1834 DEL Het CAT/C CAT
我根据三个列名合并df1和df2:
merged <- merge(df1, df2, by = c("Chrom", "Position", "Gene.Sym"), all = T)
这是数据帧“合并”的一部分; 已将NA替换为数字值,其他字符串替换为“&lt; NA&gt;”:
>head(mergedJec12)
Chrom Position Gene.Sym Target.ID.x Type.x Zygosity.x Genotype.x Ref.x Variant.x Var.Freq.x
1 chr1 861368 SAMD11 <NA> <NA> <NA> <NA> <NA> <NA> NA
2 chr1 871334 SAMD11 SAMD11_11.11186 SNP Het G/T G T 53.06122
3 chr1 876499 SAMD11 SAMD11_14.6196 SNP Hom G/G A G 100.00000
我希望通过包含NA的某些列进行子集化,但是在“merged”中由其变量化身创建的不一致性会产生问题。好的,我这样做:
merged[merged == '' | merged == 'NA' | merged == '<NA>'] <- NA
但它并没有改变“合并”。 “&lt; NA&gt;”和“NA”保持不变。我在这里缺少什么?
另外,当我跑
时NA.only <- merged[regexpr('<NA>', merged$Target.ID.x)>0,]
尝试使数据帧仅包含那些包含合并$ Target.ID.x列的值的行,而是获得一个完全充满NA和“&lt; NA&gt;”的数据帧。我很神秘。
就像一张纸条,我正在写出“&lt; NA&gt;”带空格以避免标记删除。文字中没有空格。
答案 0 :(得分:0)
这是因为你有all=TRUE
。 <NA>
值用于存在于一个数据帧中但不存在于另一个数据帧中的观察值。有关all.x
和all.y
参数的信息,请参阅the documentation:
all.x :逻辑;如果为TRUE,那么额外的行将被添加到输出中,一个用于x中的每一行,y中没有匹配的行。这些行将在那些通常用y值填充的列中具有NA。默认值为FALSE,因此只有包含x和y数据的行才会包含在输出中。
某些缺失值显示为NA
与<NA>
的原因必须与我的评论中的因素相比,其他类别。因子显示<NA>
:
> c(1,2,3,NA)
[1] 1 2 3 NA
> factor(c(1,2,3,NA))
[1] 1 2 3 <NA>
Levels: 1 2 3