特定の列の特定の値のケースを削除
サンプルデータを作成
df1 = data.frame(Name = c('George','Andrea', 'Micheal','Maggie','Ravi','Xien','Jalpa'), Grade_score=c(4,6,2,9,5,7,8), Mathematics1_score=c(45,78,44,89,66,49,72), Science_score=c(56,52,45,88,33,90,47))
データ。
Name Grade_score Mathematics1_score Science_score 1 George 4 45 56 2 Andrea 6 78 52 3 Micheal 2 44 45 4 Maggie 9 89 88 5 Ravi 5 66 33 6 Xien 7 49 90 7 Jalpa 8 72 47
方法1
df2<-df1[!(df1$Name=="George" | df1$Name=="Andrea"),]
変数nameがGeorgeまたはAndreaの行の削除。
Name Grade_score Mathematics1_score Science_score 3 Micheal 2 44 45 4 Maggie 9 89 88 5 Ravi 5 66 33 6 Xien 7 49 90 7 Jalpa 8 72 47
subset() 関数で行を削除
df2<-subset(df1, Name!="George" & Name!="Andrea")
dplyrのslice()関数を使用し、ケース番号で削除
library(dplyr) df1b<- cbind(ID = 1:nrow(df1), df1) df3 <- df1b %>% slice(-c(2, 4, 6)) ## パイプ df3 <- slice(df1b, -c(2, 4, 6)) ## オーソドックス
結果。
ID Name Grade_score Mathematics1_score Science_score 1 1 George 4 45 56 2 3 Micheal 2 44 45 3 5 Ravi 5 66 33 4 7 Jalpa 8 72 47
dplyrパッケージを使わない場合。
df4 <- df1b[-c(2, 4, 6), ]
dplyrパッケージ+演算子の場合。
library(dplyr) df1c <- df1b res01 <- df1c[!(row.names(df1c) %in% c('2','4','6')), ] res01
欠損値を含む行の削除
サンプルデータの作成
df5 = data.frame(Name = c('George','Andrea', 'Micheal','Maggie','Ravi','Xien','Jalpa',''), Mathematics_score=c(45,78,44,89,66,NA,72,87), Science_score=c(56,52,NA,88,33,90,47,76)) df5
データ。
Name Mathematics_score Science_score 1 George 45 56 2 Andrea 78 52 3 Micheal 44 NA 4 Maggie 89 88 5 Ravi 66 33 6 Xien NA 90 7 Jalpa 72 47 8 87 76
na.omit()
df5_complete <- na.omit(df5)
結果。
Name Mathematics_score Science_score 1 George 45 56 2 Andrea 78 52 4 Maggie 89 88 5 Ravi 66 33 7 Jalpa 72 47 8 87 76
complete.cases()関数
res02 <- df5[complete.cases(df5),] res02
Nullと欠損値の両方を削除
df6 <- df5 res03 <- df6[!(is.na(df6$Name) | df6$Name=="" | is.na(df6$Science_score) | df6$Science_score==""| is.na(df6$Mathematics_score) | df6$Mathematics_score==""),]
重複した行を削除
df7 <- data.frame (NAME =c ('Alisa','Bobby','jodha','jack','raghu','Cathrine', 'Alisa','Bobby','kumar','Alisa','jack','Cathrine'), Age = c (26,24,26,22,23,24,26,24,22,26,22,25), Score =c(85,63,55,74,31,77,85,63,42,85,74,78))
データ。
NAME Age Score 1 Alisa 26 85 2 Bobby 24 63 3 jodha 26 55 4 jack 22 74 5 raghu 23 31 6 Cathrine 24 77 7 Alisa 26 85 8 Bobby 24 63 9 kumar 22 42 10 Alisa 26 85 11 jack 22 74 12 Cathrine 25 78
distinct()
distinct(df7)
重複行を削除。
NAME Age Score 1 Alisa 26 85 2 Bobby 24 63 3 jodha 26 55 4 jack 22 74 5 raghu 23 31 6 Cathrine 24 77 7 kumar 22 42 8 Cathrine 25 78
unique()
unique(df7)
行番号のふるまい方がdistinct() とunique()は違っている。
NAME Age Score 1 Alisa 26 85 2 Bobby 24 63 3 jodha 26 55 4 jack 22 74 5 raghu 23 31 6 Cathrine 24 77 9 kumar 22 42 12 Cathrine 25 78
duplicated()
NAME列の重複を削除。
df7[!duplicated(df7$NAME), ]
distinct() とunique()はすべての列が同一のものを削除するが、duplicated()のこのコードは特定の列の重複を削除する。