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

如何在R中统计每行唯一登录日期数并添加至数据集

嘿,这个需求我之前也帮人解决过,给你两种在R里轻松实现的方法,你可以根据自己常用的工具选:

首先先把你的示例数据搭好(方便你直接测试):

# 构造示例数据集
df <- data.frame(
  id = 1:3,
  name = c("A", "B", "C"),
  address = c("地址1", "地址2", "地址3"),
  last_log_june1 = as.Date(c("2020-06-01", "2020-06-01", "2020-06-01")),
  last_log_june2 = as.Date(c("2020-06-01", "2020-06-01", "2020-06-02")),
  last_log_june3 = as.Date(c("2020-06-03", "2020-06-01", "2020-06-03")),
  stringsAsFactors = FALSE
)

方法1:用tidyverse(dplyr)实现

如果你平时习惯用tidyverse系列包,这个方法代码更直观:

library(tidyverse)

df <- df %>%
  rowwise() %>%  # 按行处理数据
  mutate(
    # 统计所有以last_log_开头的列里的唯一日期数,自动忽略NA
    unique_login_count = n_distinct(c_across(starts_with("last_log_")), na.rm = TRUE)
  ) %>%
  ungroup()  # 取消行分组,避免后续操作受影响

方法2:Base R实现(无需额外安装包)

如果不想加载第三方包,用Base R也能搞定:

# 第一步:筛选出所有以last_log_开头的列
log_column_indices <- grep("^last_log_", names(df))

# 第二步:逐行计算这些列里的唯一日期数量(忽略NA)
df$unique_login_count <- apply(df[, log_column_indices], 1, function(row) {
  length(unique(na.omit(row)))
})

最终结果

运行完上面任意一种方法后,你的数据集会新增unique_login_count列,结果如下:

id name address last_log_june1 last_log_june2 last_log_june3 unique_login_count
1  1    A    地址1     2020-06-01     2020-06-01     2020-06-03                  2
2  2    B    地址2     2020-06-01     2020-06-01     2020-06-01                  1
3  3    C    地址3     2020-06-01     2020-06-02     2020-06-03                  3

小提示

如果你的日期列目前是字符类型(不是Date格式),记得先转成日期类型,比如:

# 把last_log开头的列转成Date格式
df[, log_column_indices] <- lapply(df[, log_column_indices], as.Date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:43:13