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
使用dplyr
和stringr
的可选方法:
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
我有一个数据框,其中有一个像这样的列(字符类型)
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
使用dplyr
和stringr
的可选方法:
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