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

已获取多列字符串长度,如何计算每行的长度差值?

计算每行字符串长度的差值

现有代码与需求

用户已通过以下代码计算出数据框中x、y、z列的字符串长度:

data = tibble(x = c("a", "b"), y = c("aa", "b"), z = c("a", "bb"))

data %>% 
  mutate(str_length = across(c(x, y, z), ~ str_count(., ".")))

现在需要计算每行中这些字符串长度的差值,期望得到data$str_diff = c(1, 1)。

实现方案

方案一:无需单独存储长度列,一步计算

可以跳过单独生成长度列的步骤,直接在管道中计算每行长度的极差(最大值减最小值):

library(tidyverse)

data = tibble(x = c("a", "b"), y = c("aa", "b"), z = c("a", "bb"))

data %>%
  mutate(
    str_diff = pmap_dbl(across(x:z), ~ {
      lengths = str_count(c(...), ".")
      max(lengths) - min(lengths)
    })
  )

方案二:基于已生成的str_length列计算

如果已经保留了嵌套的str_length列,先将其展开为单独列,再计算差值:

data %>%
  mutate(str_length = across(c(x, y, z), ~ str_count(., "."))) %>%
  unnest_wider(str_length) %>%
  mutate(str_diff = pmax(x, y, z) - pmin(x, y, z))

方案三:用rowwise()简化行处理

借助rowwise()按行处理,结合c_across()获取每行的目标列值:

data %>%
  rowwise() %>%
  mutate(
    str_diff = max(str_count(c_across(x:z), ".")) - min(str_count(c_across(x:z), "."))
  ) %>%
  ungroup()

以上三种方案最终都会生成str_diff列,其值为c(1, 1),满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:45:37