Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr组进行变异,以选择类别的最后一个索引行,从而给出错误_R_Dplyr - Fatal编程技术网

dplyr组进行变异,以选择类别的最后一个索引行,从而给出错误

dplyr组进行变异,以选择类别的最后一个索引行,从而给出错误,r,dplyr,R,Dplyr,我有这样一个数据框: > df <- data.frame(x = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2), type = c('a', 'a', 'a', 'b', 'a', 'a', 'b', 'a', 'b', 'a', 'b')) > df x type 1 1 a 2 1 a 3 1 a 4 1 b 5 1 a 6 1 a 7 1 b 8 2 a 9 2 b 1

我有这样一个数据框:

> df <- data.frame(x = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2), type = c('a', 'a', 'a', 'b', 'a', 'a', 'b', 'a', 'b', 'a', 'b'))
> df
   x type
1  1    a
2  1    a
3  1    a
4  1    b
5  1    a
6  1    a
7  1    b
8  2    a
9  2    b
10 2    a
11 2    b
在这种情况下,我的期望输出如下:

> dfout
   x type lastA
1  1    a     1
2  1    a     2
3  1    a     3
4  1    b     3
5  1    a     5
6  1    a     6
7  1    b     6
8  2    a     1
9  2    b     1
10 2    a     3
11 2    b     3

我们可以使用
minu-rank/cumsum
来实现这一点。我们按“x”分组,然后得到逻辑索引的
cumsum
type=='a'
),并用
min\u rank
将其包装到
rank
输出

library(dplyr)
df %>%
   group_by(x) %>%
   mutate(lastA= min_rank(cumsum(type=='a')))
#  Source: local data frame [11 x 3]
#Groups: x [2]

#       x   type lastA
#   (dbl) (fctr) (int)
#1      1      a     1
#2      1      a     2
#3      1      a     3
#4      1      b     3
#5      1      a     5
#6      1      a     6
#7      1      b     6
#8      2      a     1
#9      2      b     1
#10     2      a     3
#11     2      b     3

我们可以使用
minu-rank/cumsum
来实现这一点。我们按“x”分组,然后得到逻辑索引的
cumsum
type=='a'
),并用
min\u rank
将其包装到
rank
输出

library(dplyr)
df %>%
   group_by(x) %>%
   mutate(lastA= min_rank(cumsum(type=='a')))
#  Source: local data frame [11 x 3]
#Groups: x [2]

#       x   type lastA
#   (dbl) (fctr) (int)
#1      1      a     1
#2      1      a     2
#3      1      a     3
#4      1      b     3
#5      1      a     5
#6      1      a     6
#7      1      b     6
#8      2      a     1
#9      2      b     1
#10     2      a     3
#11     2      b     3

我们可以使用
minu-rank/cumsum
来实现这一点。我们按“x”分组,然后得到逻辑索引的
cumsum
type=='a'
),并用
min\u rank
将其包装到
rank
输出

library(dplyr)
df %>%
   group_by(x) %>%
   mutate(lastA= min_rank(cumsum(type=='a')))
#  Source: local data frame [11 x 3]
#Groups: x [2]

#       x   type lastA
#   (dbl) (fctr) (int)
#1      1      a     1
#2      1      a     2
#3      1      a     3
#4      1      b     3
#5      1      a     5
#6      1      a     6
#7      1      b     6
#8      2      a     1
#9      2      b     1
#10     2      a     3
#11     2      b     3

我们可以使用
minu-rank/cumsum
来实现这一点。我们按“x”分组,然后得到逻辑索引的
cumsum
type=='a'
),并用
min\u rank
将其包装到
rank
输出

library(dplyr)
df %>%
   group_by(x) %>%
   mutate(lastA= min_rank(cumsum(type=='a')))
#  Source: local data frame [11 x 3]
#Groups: x [2]

#       x   type lastA
#   (dbl) (fctr) (int)
#1      1      a     1
#2      1      a     2
#3      1      a     3
#4      1      b     3
#5      1      a     5
#6      1      a     6
#7      1      b     6
#8      2      a     1
#9      2      b     1
#10     2      a     3
#11     2      b     3


可能有一种更简单的方法,但您可以添加
lastA
作为每组的行号,用
NA
替换为
type==“b”
替换为
replace
ifelse
,然后用package zoo中的
NA.locf
填写:
df%>%groupby(x)%>%mutate(lastA=ifelse(type==“a”,row\u number(),NA))%%>%NA.locf()
当x=3时,第一种类型是b时,您希望lastA做什么?我修改了数据集以使其更清晰。每个“类型”可能有多个a/b序列,我希望b行假定最后看到的a的最后一行号。您还可以使用
tidyr
中的
fill
函数(目前仅在开发版本中),如上面的@aosmith used na.locf:
df%>%group\u by(x)%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))>%fill(lastA)
可能有一种更简单的方法,但您可以将
lastA
添加为每组的行号,用
NA
替换为
type==“b”
替换为
replace
ifelse
,然后用package zoo中的
NA.locf
填充:
df%>%groupy\u by(x)%>%mutate(lastA=ifelse)(type=“a”,row_number(),NA))%%>%NA.locf()
当x=3时,第一种类型是b,您希望lastA做什么?我修改了数据集,使其更加清晰。每个“类型”可能有多个a/b序列,我希望b行采用上次看到的a的最后一行编号。您还可以使用
tidyr
中的
fill
函数(仅在目前的开发版本中,@aosmith使用了上面的na.locf:
df%>%groupu\u by(x)%%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))%%>%fill(lastA)
可能有一种更简单的方法,但您可以将
lastA
添加为每个组的行号,替换为
na
for
type==“b”
替换为
或一个
ifelse
,然后用package zoo中的
na.locf
填充:
df%>%groupby(x)%%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))%%>%na.locf()
当x=3时,第一种类型是b时,你想要lastA做什么?我修改了数据集以使其更清晰。每个“类型”可能有多个a/b序列,我希望b行假定最后看到的a的最后一行编号。你也可以使用
tidyr
中的
填充功能(目前仅在开发版本中),就像上面的@aosmith使用了na.locf:
df%>%groupu\u by(x)%%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))%%>%fill(lastA)
可能有一种更简单的方法,但您可以将
lastA
添加为每组的行号,替换为
na
表示
type==“b”
替换为
或一个
ifelse
,然后用package zoo中的
na.locf
填充:
df%>%groupby(x)%%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))%%>%na.locf()
当x=3时,第一种类型是b时,你想要lastA做什么?我修改了数据集以使其更清晰。每个“类型”可能有多个a/b序列,我希望b行假定最后看到的a的最后一行编号。你也可以使用
tidyr
中的
填充功能(目前仅在开发版本中),如上面的@aosmith使用了na.locf:
df%>%group\u by(x)%%>%mutate(lastA=ifelse(type==“a”,row\u number(),na))%%>%fill(lastA)
Masterful。您能评论一下我使用max/which的方法为什么失败吗?想知道我缺少的是什么吗。@user3949008根据预期的输出,我不确定您为什么要将
max
which
一起使用,which
只返回满足以下条件的元素的位置条件。假设
v1精通。您能评论一下为什么我使用max/which的方法失败了吗?想知道我缺少的是什么吗。@user3949008根据预期的输出,我不确定您为什么使用
max
which
which
只返回那些满足条件的元素。假设
v1精通。您能评论一下为什么我使用max/which的方法失败了吗?想知道我缺少的是什么吗。@user3949008根据预期的输出,我不确定您为什么要使用
max
哪个
哪个
在一起ly返回那些满足条件的元素的位置。假设
v1 Masterful。你能评论一下为什么我使用max/which的方法失败了吗?想知道我缺少的是什么吗。@user3949008基于预期的输出,我不确定你为什么要将
max
which
仅返回满足条件的元素的位置。假设
v1