繁体   English   中英

Dplyr按行不适用于未命名的位置标识符

[英]Dplyr rowwise not working on unnamed position identifiers

我正在尝试获取数据帧中每一行的最少时间。 我不知道要选择的列的名称,但我知道它们将是第一至第五列:

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]]是否应返回所有值? 我也尝试过对Student.ID进行分组,而不是按行分组,但这没有任何区别

即使在分组过程中,列表示法.[[1]]返回所有值的原因是that . 实际上没有分组。 基本上, . 与您开始使用的数据集相同。 因此,当您调用.[[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM