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

R语言如何将单列分组后每组两行的两个值分别输出至新列

方法1:使用dplyr包(推荐新手使用,语法易读)

如果你还没安装dplyr,先运行安装命令:

install.packages("dplyr")

后续操作代码如下:

# 加载dplyr包
library(dplyr)

# 构造示例数据(你可以替换成自己的实际数据)
df <- data.frame(
  Name = c("User1", "User1", "User1", "User1", "User2", "User2"),
  V1 = c("a", "a", "b", "b", "c", "c"),
  V2 = paste0("time", 1:6)
)

# 分组新增V3、V4列
df_result <- df %>%
  group_by(Name, V1) %>% # 按Name和V1共同分组,避免不同用户的相同V1值被错误合并
  mutate(
    V3 = first(V2), # 取当前组V2列的第一个值
    V4 = last(V2)   # 取当前组V2列的第二个值
  ) %>%
  ungroup() # 处理完成后取消分组,不影响后续数据操作

输出结果和你预期的完全一致。

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

如果你不想安装第三方包,可以用基础R的ave函数实现:

# 直接在原数据框上新增列
df$V3 <- ave(df$V2, df$Name, df$V1, FUN = \(x) x[1])
df$V4 <- ave(df$V2, df$Name, df$V1, FUN = \(x) x[2])

补充说明

如果你的实际数据中,组内V2列不一定按时间先后排序,你可以把first(V2)换成min(V2),last(V2)换成max(V2),就能自动取每组最小、最大的时间值,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:30:02