如何摆脱数据帧中每个单元格中奇怪的NA行

时间:2019-10-10 12:55:40

标签: r dataframe na

我有一个数据库作为名为“ data”的数据框,它包含500个对象和2个变量。 实际上

dim(data)

返回

[1] 500  2

str(data)

返回

    'data.frame':   500 obs. of  2 variables:
    $ Diagnosis          : chr  "D1" "D2" "D3" "D4" ...
    $ Type               : Factor w/ 8 levels "T1","T2",..: 6 4 1 6 1 4 4 4 5 5 ...

但是,当我尝试为特定的“诊断”检索“类型”的值时,例如“ D4”,除“类型”值外还会出现11个奇怪的NA值。实际上,似乎在此数据帧的每个单元中都有一个12个值的向量,其中11个是NA是凭空产生的。 反过来,

data[data$Diagnosis=='D4','Type']

返回:

    [1] <NA>         <NA>         <NA>         <NA>         <NA>         <NA>        
    [7] <NA>         <NA>         <NA>         <NA>         <NA>         T6

有趣的是:

data[data$Diagnosis=='D4',]

返回:

    Diagnosis         Type
NA              <NA>         <NA>
NA.1            <NA>         <NA>
NA.2            <NA>         <NA>
NA.3            <NA>         <NA>
NA.4            <NA>         <NA>
NA.5            <NA>         <NA>
NA.6            <NA>         <NA>
NA.7            <NA>         <NA>
NA.8            <NA>         <NA>
NA.9            <NA>         <NA>
NA.10           <NA>         <NA>
503              D4           T6

该数据框是在excel中创建的,然后将其导入到R Studio中,此后我对该数据框进行了许多更改。

我有两个问题:

  1. 这些NA来自何处,如何删除它们? 实际上,我想要data[data$Diagnosis=='D4','Type']

返回:

[1] T6

和:

data[data$Diagnosis=='D4',]

要重新调谐:

                   Diagnosis       Type  
  [row number]         D4           T6
  • 我无法在整个数据帧中使用omit.na(data)complete.cases(),因为我有一些我不想删除的合法NAs

    1. 如何为数据帧的单元格设置多个值。假设1#人有2个伴随诊断。如何在1#人的“诊断”中存储“ D1”和“ D2”两个值?

1 个答案:

答案 0 :(得分:0)

我认为这种解释会有所帮助。 如您所见,Type列不是character,而是factor 因此,在R中,在幕后将其视为categorical field。如您所见,它将级别显示为整数。因此,如果尝试访问该值,它将返回级别,而不是该值。您需要先将Type列转换为字符。然后进行操作

df$Type <- as.character(df$Type)