How do you keep the first value in multiple columns?

OTA*_*OTA 6 r dplyr

I have a dataframe. I want to keep the first value in multiple columns.

I prefer a tidyverse solution using the pipe %>% operator. I prefer a solution where I can input E1:N3 because I have about 50 columns in the real dataset.

This is the dataframe:

df <- data.frame(age = c(20, 25, 30), E1 = c("1 Alpha", "2 Bravo", "1 Alpha"), E2 = c("2 Bravo", "2 Bravo", "2 Bravo"), E3 = c("1 Alpha", "2 Bravo", "2 Bravo"), N1 = c("1 Alpha", "1 Alpha", "1 Alpha"), N2 = c("2 Bravo", "1 Alpha", "2 Bravo"), N3 = c("2 Bravo", "2 Bravo", "1 Alpha"))
df
#>   age      E1      E2      E3      N1      N2      N3
#> 1  20 1 Alpha 2 Bravo 1 Alpha 1 Alpha 2 Bravo 2 Bravo
#> 2  25 2 Bravo 2 Bravo 2 Bravo 1 Alpha 1 Alpha 2 Bravo
#> 3  30 1 Alpha 2 Bravo 2 Bravo 1 Alpha 2 Bravo 1 Alpha
Run Code Online (Sandbox Code Playgroud)

This is what I want:

df_expected <- data.frame(age = c(20, 25, 30), E1 = c("1", "2", "1"), E2 = c("2", "2", "2"), E3 = c("1", "2", "2"), N1 = c("1", "1", "1"), N2 = c("2", "1", "2"), N3 = c("2", "2", "1"))
df_expected
#>   age E1 E2 E3 N1 N2 N3
#> 1  20  1  2  1  1  2  2
#> 2  25  2  2  2  1  1  2
#> 3  30  1  2  2  1  2  1
Run Code Online (Sandbox Code Playgroud)

tmf*_*mnk 4

您还可以这样做:

df %>%
 mutate_at(vars(E1:N3), ~ substr(., 1, 1))

  age E1 E2 E3 N1 N2 N3
1  20  1  2  1  1  2  2
2  25  2  2  2  1  1  2
3  30  1  2  2  1  2  1
Run Code Online (Sandbox Code Playgroud)

然后,如果它始终是数字并且您正在寻找数字向量,您可以这样做:

df %>%
 mutate_at(vars(E1:N3), ~ as.numeric(substr(., 1, 1)))
Run Code Online (Sandbox Code Playgroud)