如何在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
相关产品推荐
相关产品推荐

