2017-06-30 1 views
0

データフレーム内の各行の最小時間を取得しようとしています。私が選んされる列の名前を知らないが、私は彼らが5列に最初になります知っていますか:Dplyrは、名前のない位置識別子で行を処理しない

data <- structure(list(Sch1 = c(99, 1903, 367), 
       Sch2 = c(292,248, 446), 
       Sch3 = c(252, 267, 465), 
       Sch4 = c(859, 146,360), 
       Sch5 = c(360, 36, 243), 
       Student.ID = c("Ben", "Bob", "Ali")), 
      .Names = c("Sch1", "Sch2", "Sch3", "Sch4", "Sch5", "Student.ID"), row.names = c(NA, 3L), class = "data.frame") 

# this gets overall min for ALL rows 
data %>% rowwise() %>% mutate(min_time = min(.[[1]], .[[2]], .[[3]], .[[4]], .[[5]])) 

# this gets the min for EACH row 
data %>% rowwise() %>% mutate(min_time = min(Sch1, Sch2, Sch3, Sch4, Sch5)) 

万一列表記.[[1]]返り値すべて時に行方向モードでは?私はまた、Rowwiseの代わりにStudent.IDをグループ化しようとしましたが、これは何の違いもありません。

答えて

1

理由列記.[[1]]はグループ化中でもすべての値を返します。.は実際にはグループ化されません。基本的に.は、あなたが始めたデータセットと同じものです。したがって、.[[1]]を呼び出すと、基本的に最初の列のすべての値にアクセスしています。

データを変更し、row_number列を追加する必要があります。これにより、変異している列を対応する行番号で索引付けすることができます。以下は、実行する必要があります。

data %>% 
    mutate(rn = row_number()) %>% 
    rowwise() %>% 
    mutate(min_time = min(.[[1]][rn], .[[5]][rn])) %>% 
    select(-rn) 

が得られるはず:

# Sch1 Sch2 Sch3 Sch4 Sch5 Student.ID min_time 
# <dbl> <dbl> <dbl> <dbl> <dbl>  <chr> <dbl> 
# 1 99 292 252 859 360  Ben  99 
# 2 1903 248 267 146 36  Bob  36 
# 3 367 446 465 360 243  Ali  243 
関連する問題