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

如何在R中创建统计字符数的新列并将缺失值设为0?

问题与解决方案

问题描述

现有如下R语言DataFrame:

df <- data.frame(id = c(1,2,3), date1 = c("2014-Dec 2018","2009-2010","Jan 2009-Aug 2010"), date2 = c("Feb 2016-Dec 2018","2014-Dec 2018","Oct 2013-Dec 2018"))

需要生成新的DataFrame,为原数据的date1、date2列分别创建统计字符数的新列,同时将缺失值替换为0。期望输出如下:

data.frame(id = c(1,2,3), date1_count_character = c("13","9","17"), date2_count_character = c("17","13","17"))

解决方案

方法1:基础R实现

直接通过列操作生成统计列,处理缺失值并转换格式:

# 为date1生成字符统计列,缺失值替换为0并转为字符型
df$date1_count_character <- as.character(ifelse(is.na(df$date1), 0, nchar(df$date1)))
# 为date2生成字符统计列
df$date2_count_character <- as.character(ifelse(is.na(df$date2), 0, nchar(df$date2)))

# 提取需要的列组成新DataFrame
new_df <- df[, c("id", "date1_count_character", "date2_count_character")]

# 输出结果
print(new_df)

方法2:tidyverse(dplyr)批量处理

如果使用tidyverse工具集,可以更简洁地批量处理多列:

library(dplyr)

new_df <- df %>%
  # 批量处理date1和date2列,生成统计列
  mutate(
    across(
      .cols = c(date1, date2),
      .fns = ~ as.character(ifelse(is.na(.), 0, nchar(.))),
      .names = "{.col}_count_character"  # 自动生成新列名
    )
  ) %>%
  # 保留需要的列
  select(id, date1_count_character, date2_count_character)

# 输出结果
print(new_df)

关键说明

  • nchar():用于统计字符串的总字符数,包含空格、连字符等所有可见字符
  • ifelse(is.na(x), 0, nchar(x)):判断并将缺失值替换为0
  • as.character():将数值型计数结果转为字符型,匹配期望输出的格式
  • tidyverse的across():批量处理指定列,通过{.col}自动复用原列名生成新列,减少重复代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:25:19