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

将含缺失值的不等长元素表格转换为计数矩阵

如何将带计数的字符串表格转换为包含计数的存在/缺失矩阵(R语言)

问题背景

你有一个每行元素数量不等的表格,单元格内容是带计数(1或2)的字符串(比如cat:2),需要生成一个矩阵:行是原表格的分组(A/B/C/D),列是所有出现过的动物名称,对应位置填该分组下的计数,未出现的填0。原有的0/1缺失矩阵方案无法满足需求,需要保留实际计数。

输入样本数据

df <- structure(list(V1 = c("A", "B", "C", "D"), V2 = c("cat:2", "dog:2", "horse:2", "cat:1"), V3 = c("dog:1", "mouse:2", "", "mouse:2"), V4 = c("mouse:1", "dolphin:2", "", "dolphin:2"), V5 = c("horse:2", "", "", "")), .Names = c("V1", "V2", "V3", "V4", "V5"), class = "data.frame", row.names = c(NA, -4L))

解决方案(使用tidyverse工具链)

我们可以通过宽格式转长格式→拆分键值对→长格式转宽格式三步实现,全程用tidyverse的函数完成:

  1. 首先加载必要的包:
library(tidyverse)
  1. 转换为长格式并拆分计数:
    这一步把每行的多个动物计数拆成单独的行,同时将动物:计数的字符串拆分成两列(动物名和数值型计数),并过滤掉空单元格:
long_df <- df %>%
  pivot_longer(cols = -V1, names_to = "temp_col", values_to = "animal_count") %>%
  filter(animal_count != "") %>%
  separate(animal_count, into = c("animal", "count"), sep = ":", convert = TRUE)
  1. 转换为目标宽格式矩阵:
    将动物名作为列,分组(A/B/C/D)作为行,缺失的位置用0填充:
result <- long_df %>%
  pivot_wider(names_from = animal, values_from = count, values_fill = 0) %>%
  column_to_rownames("V1") # 将A/B/C/D设为行名,更贴近目标格式

最终输出

运行上述代码后,result就是你要的矩阵:

> result
  cat dog mouse horse dolphin
A   2   1     1     2       0
B   0   2     2     0       2
C   0   0     0     2       0
D   1   0     2     0       2

完全匹配你给出的目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:45:02