質問

私はこのようなデータフレームに邪魔にならないデータを持っています。

ここでは、サッカーチームの名前を「チーム」に見ることができます。 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パッケージからのselectkeyを(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)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top