R-基于另一列对列进行变异
使用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
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吗?我已经用所需的输出编辑了这个问题-提前谢谢这正是我想要的呃-太好了-非常感谢。这正是我想要的-太好了-非常感谢。