You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中将胜负记录列拆分为胜场、负场两列?

在R中拆分胜负记录为数值型胜场/负场列

下面提供几种实用的实现方法,附代码示例:

方法1:用tidyverse的separate()(推荐,简洁直观)

借助tidyr包的separate()函数可以一步完成拆分和类型转换:

# 加载tidyverse包(包含tidyr)
library(tidyverse)

# 构造示例数据框
df <- tibble(record = c("7-5", "12-3", "0-10", "8-8"))

# 拆分列并自动转为数值型
df_split <- df %>%
  separate(record, into = c("wins", "losses"), sep = "-", convert = TRUE)

# 验证类型
str(df_split)
#> tibble [4 × 2] (S3: tbl_df/tbl/data.frame)
#>  $ wins  : num [1:4] 7 12 0 8
#>  $ losses: num [1:4] 5 3 10 8

sep="-"指定分隔符为短横线,convert=TRUE会自动将拆分后的字符转为合适的数值类型。

方法2:基础R原生实现(无需额外包)

如果不想加载第三方包,用基础R的strsplit()和矩阵操作也能实现:

# 构造示例数据框
df <- data.frame(record = c("7-5", "12-3", "0-10", "8-8"), stringsAsFactors = FALSE)

# 拆分字符串并转为矩阵
split_matrix <- do.call(rbind, strsplit(df$record, "-"))

# 添加数值型的胜场、负场列
df$wins <- as.numeric(split_matrix[, 1])
df$losses <- as.numeric(split_matrix[, 2])

# 查看结果
str(df)
#> 'data.frame':	4 obs. of  3 variables:
#>  $ record: chr  "7-5" "12-3" "0-10" "8-8"
#>  $ wins  : num  7 12 0 8
#>  $ losses: num  5 3 10 8

strsplit()返回列表,用do.call(rbind)转为矩阵后,提取两列并转为数值型即可。

方法3:用data.table处理大数据集(高效)

如果你的数据量很大,data.table的tstrsplit()能提供更优的性能:

# 加载data.table包
library(data.table)

# 构造示例data.table
dt <- data.table(record = c("7-5", "12-3", "0-10", "8-8"))

# 拆分并直接添加数值型新列
dt[, c("wins", "losses") := tstrsplit(record, "-", type.convert = TRUE)]

# 验证类型
str(dt)
#> Classes 'data.table' and 'data.frame':	4 obs. of  3 variables:
#>  $ record: chr  "7-5" "12-3" "0-10" "8-8"
#>  $ wins  : num  7 12 0 8
#>  $ losses: num  5 3 10 8
#>  - attr(*, ".internal.selfref")=<externalptr>

:=是data.table的原地修改语法,type.convert=TRUE自动完成类型转换,适合处理百万级以上的数据集。

内容的提问来源于stack exchange,提问作者gshelor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:54:23