R 我可以获取数据框中每一行的第一个元素吗

R Can I get the first element for every row in a dataframe

我有一个数据框,其中有一个像这样的列(字符类型)

col
"1,3,4,5"
"1,7,2,5"
"8,2,2,9"

如何创建 2 个新变量以便使用 dplyr 获取变量 col 中的第一个和最后一个元素?

col.       first last
"1,3,4,5"  1     5   
"1,7,2,5"  1     5 
"8,2,2,9"  8     9 

您可以使用正则表达式,我们删除逗号之间的所有元素。

read.table(text=sub(",.*,",' ', col))

  V1 V2
1  1  5
2  1  5
3  8  9

 data.frame(col) %>%
  separate(col, c('v1', 'v2'), ',.*,')
  v1 v2
1  1  5
2  1  5
3  8  9

另一种方式:

a <- read.csv(text=col, h = F)
a[c(1,ncol(a))]
  V1 V4
1  1  5
2  1  5
3  8  9

可能的解决方案:

library(tidyverse)

df %>% 
  mutate(first = str_extract(col, "^\d+"),
     last = str_extract(col, "\d+$"))

#>         col first last
#> 1 1,2,3,4,5     1    5
#> 2   1,7,2,5     1    5
#> 3   8,2,2,9     8    9

另一种可能的解决方案:

library(tidyverse)

df %>% 
  mutate(id = row_number()) %>% 
  separate_rows(col, sep =",") %>% 
  group_by(id) %>% 
  summarise(first = first(col), last = last(col)) %>% 
  bind_cols(df, .) %>% 
  select(-id)

#>       col first last
#> 1 1,3,4,5     1    5
#> 2 1,7,2,5     1    5
#> 3 8,2,2,9     8    9

使用dplyrstringr的可选方法:

library(dplyr)
library(stringr)

df <- data.frame(col = c("1,3,4,5","1,7,2,5","8,2,2,9"))

df %>%
    dplyr::mutate(first = stringr::str_sub(col, start = 1, end = 1),
                  last = stringr::str_sub(col, start = -1, end = -1))

      col first last
1 1,3,4,5     1    5
2 1,7,2,5     1    5
3 8,2,2,9     8    9