我有2列,HHVEH和SAMPN组。 SAMPN的所有成员都具有相同的HHVEH。我想定义一个新列,直到HHVEH的数量为2。
示例
TYPE_WALLPAPER
输出
SAMPN PERNO HHVEH
1 1 1
1 2 1
1 3 1
2 1 2
3 2 2
3 3 2
4 4 0
4 3 0
说明:第一组HHVEH == 1,因此第一行为2,其他行为NA。第二组HHVEH == 2所以它的前2个子项应该是2,但是只有一行,所以行是2。第三组HHVEH == 2都得到2最后一个HHVEH == 0,所以所有的NA >
SAMPN PERNO HHVEH mode.car
1 1 1 2
1 2 1 NA
1 3 1 NA
2 1 2 2
3 2 2 2
3 3 2 2
4 4 0 NA
4 3 0 NA
答案 0 :(得分:2)
这是基于更新数据的一种选择。在按“ SAMPN”分组后,通过rep
根据“ HHVEH”中的first
值将2和其余的NA
library(dplyr)
df1 %>%
group_by(SAMPN) %>%
mutate(mode.car = rep(c(2, NA_integer_),
c(pmin(n(), first(HHVEH)), pmax(0, n() - first(HHVEH)))))
# A tibble: 11 x 4
# Groups: SAMPN [3]
# SAMPN HHVEH PERNO mode.car
# <chr> <dbl> <fct> <dbl>
# 1 " 827" 3 2 2
# 2 " 827" 3 4 2
# 3 " 1133" 2 4 2
# 4 " 1133" 2 3 2
# 5 " 1133" 2 3 NA
# 6 " 1133" 2 5 NA
# 7 " 1133" 2 1 NA
# 8 " 1133" 2 1 NA
# 9 " 1857" 3 3 2
#10 " 1857" 3 2 2
#11 " 1857" 3 3 2