-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathna.qmd
123 lines (94 loc) · 2.38 KB
/
na.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# NA {#na}
```{r echo=FALSE}
load("variable.RData")
```
## NA とは
::: callout-tip
```{r echo=FALSE}
i <- i + 1
```
TIP `r sprintf("%03d", i)` NA とは
:::
エクセルや CSV などからデータをインポートする際に、データの入っていないセルは NA と表示されます。
```{r include=FALSE}
df <- read.table(text = "Factor, Character, Double
1,Sato,
,Takahashi,2.7
3,,3.4",
header = TRUE,
colClasses=c("factor", "character", "double"),
sep=",")
df[2,"Factor"] <- NA
df[3,"Character"] <- NA
df[1,"Double"] <- NA
library(DT)
```
まず、データフレームを用意します。それぞれ、データ型を表している列名になっています。
RStudio でデータフレームを表示させると、通常は `NA` と表示されます。なお、RStudio 上では、Factor は `NA` とは表示されないようです。
```{r echo=FALSE}
rowCallback <- c(
"function(row, data){",
" for(var i=0; i<data.length; i++){",
" if(data[i] === null){",
" $('td:eq('+i+')', row).html('NA')",
" .css({'color': 'rgb(151,151,151)', 'font-style': 'italic'});",
" }",
" }",
"}"
)
DT::datatable(df, options = list(rowCallback = JS(rowCallback)))
```
NA かどうかを確認するには、`is.na()` 関数を使います。
```{r}
is.na(df[2,"Factor"])
```
```{r}
is.na(df[3,"Character"])
```
```{r}
is.na(df[1,"Double"])
```
## 数える
::: callout-tip
```{r echo=FALSE}
i <- i + 1
```
TIP `r sprintf("%03d", i)` 指定した列の `NA` を数える
:::
```{r eval=FALSE}
sum(is.na(df$Double))
```
## 置き換え
::: callout-tip
```{r echo=FALSE}
i <- i + 1
```
TIP `r sprintf("%03d", i)` すべての列の置き換え
:::
すべての列の NA を 0 に置き換えます。ただし、Factor 型のレベルに 0 がないと警告が出ます。
```{r eval=FALSE}
df[is.na(df)] <- 0
```
```{r echo=FALSE}
df2 <- df
df2[is.na(df2)] <- 0
DT::datatable(df2, options = list(rowCallback = JS(rowCallback)))
```
::: callout-tip
```{r echo=FALSE}
i <- i + 1
```
TIP `r sprintf("%03d", i)` 指定した列の置き換え
:::
Double 列の `NA` を 0 に置き換えます。
```{r eval=FALSE}
df[is.na(df$Double),"Double"] <- 0
```
```{r echo=FALSE}
df2 <- df
df2[is.na(df2$Double),"Double"] <- 0
DT::datatable(df2, options = list(rowCallback = JS(rowCallback)))
```
```{r echo=FALSE}
save(i, file = "variable.RData")
```