如何在已分组的R数据框中按组添加指定列值?
按分组为每组添加指定序列的列
原始数据框
dat=structure(list(A = c("n", "n", "F", "F"), Par = c(1, 1, 8, 3), var = c(1, 10, 1,5), dat = c("T", "T", "T", "T")), row.names = c(NA, 4L), class = "data.frame")
需求
按A列分组,为每个组的两行分别添加"40-25"和"25-200"作为ye列的值。
尝试的错误代码
dat%>%group_by(A)%>% mutate(ye = c( "40-25", "25-200"))
错误信息
! Assigned data
valuemust be compatible with existing data.
✖ Existing data has 4 rows.
✖ Assigned data has 2 rows.
ℹ Only vectors of size 1 are recycled.
Runrlang::last_error()to see where the error occurred.
期望输出
A Par var dat ye 1 n 1 1 T "40-25" 2 n 1 10 T "25-200" 3 F 8 1 T "40-25" 4 F 3 5 T "25-200"
正确实现方法
方法1:利用row_number()判断组内行号赋值
library(dplyr) dat %>% group_by(A) %>% mutate(ye = ifelse(row_number() == 1, "40-25", "25-200")) %>% ungroup()
方法2:通过索引匹配组内行号
dat %>% group_by(A) %>% mutate(ye = c("40-25", "25-200")[row_number()]) %>% ungroup()
方法3:针对固定每组2行的情况重复序列
dat %>% group_by(A) %>% mutate(ye = rep(c("40-25", "25-200"), n()/2)) %>% ungroup()
以上三种方法均能得到期望输出,其中方法1和2更通用,可适配组内行数变化的场景;若确定每组固定为2行,三种方法均可使用。
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

