TIDYRの出力から不完全なケースを削除する - Gather() - R
質問
私はこのようなデータフレームに邪魔にならないデータを持っています。
ここでは、サッカーチームの名前を「チーム」に見ることができます。 name1-3は、最初の列のこれらのチームを参照するために使用されるさまざまな名前を示す変数です。
team name1 name2 name3
1 Loughborough Loughborough
2 Luton Town Luton Town Luton
3 Macclesfield Macclesfield
4 Maidstone United Maidstone United
5 Manchester City Manchester City Man City
6 Manchester United Manchester United Newton Heath Man United
7 Mansfield Town Mansfield Town Mansfield
8 Merthyr Town Merthyr Town
.
私の目的は、Team-Name1、Team-Name2、Team-Name3のペアリングを持つ2列にデータを取得することです。 Name1、Name2、Name3のデータがあるペアリングを保持したいだけです。
これを行うには、TIDYRのgather()
temp <- dat %>% gather(key, value, 2:4)
temp$key<-NULL
temp
.
次の出力を示します。
team value
1 Loughborough Loughborough
2 Luton Town Luton Town
3 Macclesfield Macclesfield
4 Maidstone United Maidstone United
5 Manchester City Manchester City
6 Manchester United Manchester United
7 Mansfield Town Mansfield Town
8 Merthyr Town Merthyr Town
9 Loughborough
10 Luton Town Luton
11 Macclesfield
12 Maidstone United
13 Manchester City Man City
14 Manchester United Newton Heath
15 Mansfield Town Mansfield
16 Merthyr Town
17 Loughborough
18 Luton Town
19 Macclesfield
20 Maidstone United
21 Manchester City
22 Manchester United Man United
23 Mansfield Town
24 Merthyr Town
.
私は不完全なケースを除去しようとしました(例えば、行20,21,23,24は22行ずつ)、使用:
temp[complete.cases(temp),]
.
これは一見空の値の観察に文字が含まれているので機能しませんでした。 gather()
を要因に変換しようとしましたが、これも機能しませんでした。
不完全なケースを取り除く方法を聞きたいのですが。
サンプルデータ...
dat<-structure(list(team = structure(1:8, .Label = c("Loughborough",
"Luton Town", "Macclesfield", "Maidstone United", "Manchester City",
"Manchester United", "Mansfield Town", "Merthyr Town"), class = "factor"),
name1 = structure(1:8, .Label = c("Loughborough", "Luton Town",
"Macclesfield", "Maidstone United", "Manchester City", "Manchester United",
"Mansfield Town", "Merthyr Town"), class = "factor"), name2 = structure(c(1L,
2L, 1L, 1L, 3L, 5L, 4L, 1L), .Label = c("", "Luton", "Man City",
"Mansfield", "Newton Heath"), class = "factor"), name3 = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("", "Man United"), class = "factor")), .Names = c("team",
"name1", "name2", "name3"), row.names = c(NA, -8L), class = "data.frame")
. 解決
filter
パッケージからのselect
とkey
を(dplyr
列を削除するには)を追加することもできます。
temp <- dat %>%
gather(key, value, 2:4) %>%
filter(value != "") %>%
select(-key)
# team value
# 1 Loughborough Loughborough
# 2 Luton Town Luton Town
# 3 Macclesfield Macclesfield
# 4 Maidstone United Maidstone United
# 5 Manchester City Manchester City
# 6 Manchester United Manchester United
# 7 Mansfield Town Mansfield Town
# 8 Merthyr Town Merthyr Town
# 9 Luton Town Luton
# 10 Manchester City Man City
# 11 Manchester United Newton Heath
# 12 Mansfield Town Mansfield
# 13 Manchester United Man United
. 他のヒント
あなたは求めていますか:temp[temp$value!='',]
?gather
は空の文字列に対して非難されないようにしてください。最初のデータもそれらを持っていました。まずそれらを最初に置き換えることができ、na.rm
:
gather
引数を使用できます。
dat[dat==''] <- NA
temp <- dat %>% gather(key, value, 2:4, na.rm=TRUE)
temp$key<-NULL
tempA
. 類似のアプローチですが、NA.OMITを利用しています:
dat %>%
gather(key, value, -team) %>%
select(-key) %>%
mutate(value = ifelse(value == "", NA, value)) %>%
na.omit %>%
arrange(team)
. 所属していません StackOverflow