R 如何拆分列并将第一个拆分的值保留为代表值

R 如何拆分列并将第一个拆分的值保留为代表值,r,regex,dplyr,R,Regex,Dplyr,我有以下数据框 库(tidyverse) #>+ggplot2 2.2.1.9000日期:2017-10-10 #>+TIBLE 1.3.4 R:3.3.2 #>+tidyr 0.7.1操作系统:macOS Sierra 10.12.6 #>+readr 1.1.1 GUI:X11 #>+purrr 0.2.3语言环境:en_US.UTF-8 #>+dplyr 0.7.3 TZ:亚洲/东京 #>+stringr 1.2.0 #>+猫类0.2.0 #> ── 冲突───────────────

我有以下数据框


库(tidyverse)
#>+ggplot2 2.2.1.9000日期:2017-10-10
#>+TIBLE 1.3.4 R:3.3.2
#>+tidyr 0.7.1操作系统:macOS Sierra 10.12.6
#>+readr 1.1.1 GUI:X11
#>+purrr 0.2.3语言环境:en_US.UTF-8
#>+dplyr 0.7.3 TZ:亚洲/东京
#>+stringr 1.2.0
#>+猫类0.2.0
#> ── 冲突────────────────────────────────────────────────────
#>*filter(),来自dplyr,掩码stats::filter()
#>*lag(),来自dplyr,屏蔽stats::lag()
DF%
as.tibble()
DF
#>#一个TIBLE:4 x 2
#>V1 V2
#>                                              
#>1地点1地点2地点2地点4地点2地点3地点5 100
#>地点2200
#>3处6-6处500
#>4位置1-位置2-位置3-位置4 10
我要做的是将
V1
拆分为“-”,然后选择第一个使用第一个拆分的值作为
V1
的新值。导致:

V1 V2
地点1100
地点7200
地点6500
地点110
我被这件事困住了:

as.data.frame(str_split_fixed(DF$V1,“-”,8))
V1 V2 V3 V4 V5 V6 V7 V8
1地点1地点2地点2地点4地点2地点3地点5
2位7
3个地点6个地点6
4位1位2位3位4

我们可以使用
separate
tidyr
extra=“merge”
分离,然后只保留感兴趣的列

library(tidyr)
separate(DF, V1, into = c("V1", "Extra"), extra = "merge") %>% 
               select(-Extra)

还是用正则表达式

DF %>%
    mutate(V1 =  sub("-.*", "", V1))
# A tibble: 4 x 2
#      V1    V2
#   <chr> <dbl>
#1 Place1   100
#2 Place7   200
#3 Place6   500
#4 Place1    10
DF%>%
变异(V1=sub(“-.*”,“”,V1))
#一个tibble:4x2
#V1 V2
#    
#1个地点1100
#地点2200
#3位6500
#4地点110

我们可以使用
separate
tidyr
extra=“merge”
分离,然后只保留感兴趣的列

library(tidyr)
separate(DF, V1, into = c("V1", "Extra"), extra = "merge") %>% 
               select(-Extra)

还是用正则表达式

DF %>%
    mutate(V1 =  sub("-.*", "", V1))
# A tibble: 4 x 2
#      V1    V2
#   <chr> <dbl>
#1 Place1   100
#2 Place7   200
#3 Place6   500
#4 Place1    10
DF%>%
变异(V1=sub(“-.*”,“”,V1))
#一个tibble:4x2
#V1 V2
#    
#1个地点1100
#地点2200
#3位6500
#4地点110

这是一个使用base
R
的解决方案:

DF <- data.frame(V1=c("Place1-Place2-Place2-Place4-Place2-Place3-Place5",
                      "Place7",
                      "Place6-Place6",
                      "Place1-Place2-Place3-Place4"), 
                 V2=c(100,200,500,10))
DF$V1 <- sub("-.*", "", DF$V1)
DF
# > DF
#       V1  V2
# 1 Place1 100
# 2 Place7 200
# 3 Place6 500
# 4 Place1  10

DF这是一个使用base
R
的解决方案:

DF <- data.frame(V1=c("Place1-Place2-Place2-Place4-Place2-Place3-Place5",
                      "Place7",
                      "Place6-Place6",
                      "Place1-Place2-Place3-Place4"), 
                 V2=c(100,200,500,10))
DF$V1 <- sub("-.*", "", DF$V1)
DF
# > DF
#       V1  V2
# 1 Place1 100
# 2 Place7 200
# 3 Place6 500
# 4 Place1  10

DF谢谢。但是有一条警告信息:1个位置的值太少:2
。这就是为什么我不使用
separate
@yaffle的原因。这是一个友好的警告谢谢。但是有一条警告信息:1个位置的值太少:2
。这就是为什么我不使用
separate
@yaffle的原因,它是一个友好的warning@Jimbou那不行。试试看
DF%%>%mutate(index=1:n())%%>%分隔行(V1,sep=“-”)%%>%groupby(index)%%>%slice(1)
@Jimbou这不行。试试看
DF%%>%mutate(index=1:n())%%分隔行(V1,sep=“-”)%%>%groupby(index)%%>%slice(1)
sub部分与我的答案有何不同?sub部分与我的答案有何不同?