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

如何在R语言数据框中对空格分隔的0、1字符串求和?

解决R语言中对数据框列内空格分隔的0/1字符串求和的问题

Hey there! Let's work through how to sum those 0s and 1s in each space-separated string. First, let's start with a sample data frame so we can test out the solutions together:

# 构造示例数据框
df <- data.frame(
  id = 1:3,
  binary_str = c('0 1 0 0 0 1 1 0', '1 1 1 0 0 0 0 0', '0 0 0 0 1 1 1 1')
)

方法1:Base R(无需额外包)

这是最直接的方法,用strsplit拆分字符串,再转成数值求和:

# 拆分字符串并求和
df$sum_binary <- sapply(strsplit(df$binary_str, " "), function(x) sum(as.numeric(x)))

# 查看结果
df

小提示:如果你的字符串存在多个连续空格(比如'0 1 0'),把分隔符改成"\\s+"就能正确处理:

df$sum_binary <- sapply(strsplit(df$binary_str, "\\s+"), function(x) sum(as.numeric(x)))

方法2:Tidyverse 工作流(dplyr + tidyr)

如果你习惯用管道操作,tidyverse的方法会更直观:

方式A:用str_split和map_dbl

library(tidyverse)

df <- df %>%
  mutate(
    # 将字符串拆分为字符向量列表
    binary_list = str_split(binary_str, " "),
    # 对每个列表里的元素转成数值后求和
    sum_binary = map_dbl(binary_list, ~ sum(as.numeric(.x)))
  ) %>%
  # 可选:移除中间生成的binary_list列
  select(-binary_list)

方式B:拆分行后分组求和

这种方法更适合需要查看拆分后每个数值的场景:

df <- df %>%
  # 将每个空格分隔的元素拆成单独的行
  separate_rows(binary_str, sep = " ") %>%
  # 转成数值类型
  mutate(binary_num = as.numeric(binary_str)) %>%
  # 按id分组求和
  group_by(id) %>%
  summarize(sum_binary = sum(binary_num), .groups = "drop") %>%
  # 合并回原数据框
  left_join(df, by = "id")

方法3:Data.table(适合大数据量)

如果你的数据框非常大,data.table的方法会更高效:

library(data.table)

# 转换为data.table对象
setDT(df)
# 添加求和列
df[, sum_binary := sapply(strsplit(binary_str, " "), function(x) sum(as.numeric(x)))]

所有方法最终都会得到这样的结果:

id          binary_str sum_binary
1  1 0 1 0 0 0 1 1 0          3
2  2 1 1 1 0 0 0 0 0          3
3  3 0 0 0 0 1 1 1 1          4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:51