R-基于另一列对列进行变异

R-基于另一列对列进行变异,r,dataframe,calculated-columns,mutate,R,Dataframe,Calculated Columns,Mutate,使用R: 对于数据帧: A<-c(3,3,3,3,1,1,2,2,2,2,2) df<-data.frame(A) A在这里,每当A发生变化时,我都会分配一个新的组,然后在每个组的B的第一行中放置一个1 (如果各组的A值不同,可以将前两行用group\u替换为(A),但不清楚这是否是一个公平的假设。) 库(dplyr) df%>% 突变(组=cumsum(A!=lag(A,默认值=0))%>% 分组依据(分组)%>% 变异(B=1*(行号()%) 解组() 结果 # A tibb

使用R: 对于数据帧:

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

A在这里,每当
A
发生变化时,我都会分配一个新的组,然后在每个组的
B
的第一行中放置一个1

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

库(dplyr)
df%>%
突变(组=cumsum(A!=lag(A,默认值=0))%>%
分组依据(分组)%>%
变异(B=1*(行号()%)
解组()
结果

# 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
#一个tible:11 x 3
A组B组
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

在这里,每当
a
发生变化时,我都会分配一个新的组,然后在每个组的
B
的第一行中加一个1

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

库(dplyr)
df%>%
突变(组=cumsum(A!=lag(A,默认值=0))%>%
分组依据(分组)%>%
变异(B=1*(行号()%)
解组()
结果

# 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
#一个tible:11 x 3
A组B组
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

按“A”分组后,使用
rep
将“A”的值设为1,将行数与组值之差设为0

library(dplyr)
library(data.table)
df %>%
   group_by(A, grp = rleid(A)) %>%
   mutate(B =  rep(c(1, 0), c(first(A), n() - first(A)))) %>%   
   ungroup  %>%
   select(-grp)
-输出

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

按“A”分组后,使用
rep
对“A”的值加上1,0以及行数与组值的差值

library(dplyr)
library(data.table)
df %>%
   group_by(A, grp = rleid(A)) %>%
   mutate(B =  rep(c(1, 0), c(first(A), n() - first(A)))) %>%   
   ungroup  %>%
   select(-grp)
-输出

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

你的意思还不完全清楚。你想将向量B添加到data.frame df吗?我已经用所需的输出编辑了这个问题-提前谢谢。你的意思还不完全清楚。你想将向量B添加到data.frame df吗?我已经用所需的输出编辑了这个问题-提前谢谢这正是我想要的呃-太好了-非常感谢。这正是我想要的-太好了-非常感谢。