【问题标题】:How to get rid of wierd NA rows in each cell of a dataframe如何摆脱数据框每个单元格中奇怪的 NA 行
【发布时间】:2019-10-10 12:55:40
【问题描述】:

我有一个数据库作为名为“数据”的数据框,它包含 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

dataframe 是在 excel 中创建的,然后我将它导入到 R studio,从那以后我对 dataframe 做了很多修改。

我有两个问题:

  1. 这些 NA 是从哪里来的?如何删除它们? 其实我要data[data$Diagnosis=='D4','Type']

返回:

[1] T6

和:

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

返回:

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

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

【问题讨论】:

  • 这些问题不是很清楚。对于 Q1) 你想对数据做什么?删除每列中带有 NA 的所有行?删除至少一列中包含 NA 的所有行?对于 Q2)您要放入此数据框中的第二个诊断来自哪里?在另一个data.frame中?在向量中?在你的脑海里?在同一个数据框中?
  • Q1) 我希望 data[data$Diagnosis=='D4','Type'] 在没有那些 NA 的情况下返回 'T6' Q2) 假设它在我的脑海中,而不是在任何其他数据中结构
  • 如果你使用data[data$Diagnosis=='D4',]['Type']会发生什么?
  • 数据[data$Diagnosis %in% 'D4','Type']
  • 是的,但是如果有一行只有一个 NA,确保 Type 列中没有 NA 将需要从 Diagnosis 列中删除非 NA 数据,除非您指定一些模式来重新分配非 NA 值不同的行。

标签: r dataframe na


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多