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)
您还可以这样做:
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)