首页 > 解决方案 > R - 基于另一列改变列

问题描述

使用 R:对于数据框:

A<-c(3,3,3,3,1,1,2,2,2,2,2)
df<-data.frame(A)

如何添加列以使输出与以下内容相同:

A<-c(3,3,3,3,1,1,2,2,2,2,2)
df<-data.frame(A)

B<-c(1,1,1,0,1,0,1,1,0,0,0)
mutate(df,B)

换句话说,是否有“B”列的公式 - 这样它会查看“A”列......并列出“1”,3次放置一个“0”......等等。

所以 - 所需的输出(给定列'A')是:

在此处输入图像描述

谢谢你。

标签: rdataframecalculated-columnsdplyr

解决方案


在这里,每次更改时我都会分配一个新组A,然后在每个组B中的前 #A 行中放置一个 1。

(如果A每个组的值不同,您可以将前两行替换为group_by(A),但不清楚这是否是一个公平的假设。)

library(dplyr)
df %>%
  mutate(group = cumsum(A != lag(A, default = 0))) %>%
  group_by(group) %>%
  mutate(B = 1 * (row_number() <= A)) %>%
  ungroup()

结果

# A tibble: 11 x 3
       A group     B
   <dbl> <int> <dbl>
 1     3     1     1
 2     3     1     1
 3     3     1     1
 4     3     1     0
 5     1     2     1
 6     1     2     0
 7     2     3     1
 8     2     3     1
 9     2     3     0
10     2     3     0
11     2     3     0

推荐阅读