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
相关产品推荐
相关产品推荐

