【发布时间】: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 做了很多修改。
我有两个问题:
- 这些 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# 人有 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 值不同的行。