我想使用列名而不是索引号对任意一组列执行按行操作。我知道使用基r和按数字索引的列是可行的,但是如果我可以在tidyverse管道中使用列名来进行此操作,那么对我来说,出错的可能性就较小。
这是我要做的事的基础。
set dateformat dmy;
select PersonalDetails_DOB
,convert(nvarchar(10), cast(PersonalDetails_DOB as datetime), 102) as ANSI_DOB
,convert(nvarchar(10), cast(PersonalDetails_DOB as datetime), 120) as ODBC_DOB
from Users;
由reprex package(v0.2.1)于2019-01-10创建
我实际上想要一张看起来像这样的桌子
library(tidyverse)
df <- tibble(name = c("Sam", "Jane", "Erin", "Bert", "Lola"),
age = c(11, 10, 11, 12, 10),
score_a = c(19, 16, 16, 5, 10),
score_b = c(10, 10, 10, 10, 10))
df %>%
rowwise() %>%
mutate_at(vars(score_a:score_b),funs(total = sum))
#> Source: local data frame [5 x 6]
#> Groups: <by row>
#>
#> # A tibble: 5 x 6
#> name age score_a score_b score_a_total score_b_total
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Sam 11 19 10 19 10
#> 2 Jane 10 16 10 16 10
#> 3 Erin 11 16 10 16 10
#> 4 Bert 12 5 10 5 10
#> 5 Lola 10 10 10 10 10
由reprex package(v0.2.1)于2019-01-10创建
答案 0 :(得分:0)
我认为在行函数中使用grep()
可能是一种可能性:
library(tidyverse)
df %>%
mutate(total_score = rowSums(.[,grep("score_a|score_b", names(.))]))
name age score_a score_b total_score
<chr> <dbl> <dbl> <dbl> <dbl>
1 Sam 11. 19. 10. 29.
2 Jane 10. 16. 10. 26.
3 Erin 11. 16. 10. 26.
4 Bert 12. 5. 10. 15.
5 Lola 10. 10. 10. 20.
df %>%
mutate(total_score = rowSums(.[,grep("age|score_b", names(.))]))
name age score_a score_b total_score
<chr> <dbl> <dbl> <dbl> <dbl>
1 Sam 11. 19. 10. 21.
2 Jane 10. 16. 10. 20.
3 Erin 11. 16. 10. 21.
4 Bert 12. 5. 10. 22.
5 Lola 10. 10. 10. 20.
通过这种方式,您可以选择任意一组列,并按其名称引用这些列。