Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
根据R中以前出现的情况指定虚拟值_R_Dataframe_Dummy Variable - Fatal编程技术网

根据R中以前出现的情况指定虚拟值

根据R中以前出现的情况指定虚拟值,r,dataframe,dummy-variable,R,Dataframe,Dummy Variable,考虑以下数据框架: nameID titleID year dummy 1 a b 1999 1 2 e c 1999 1 3 i d 2000 0 4 o f 2000 0 5 a f 2000 1 6 e g 2001 0 7 i h 2002 0 8

考虑以下数据框架:

   nameID titleID year dummy
1       a       b 1999     1
2       e       c 1999     1
3       i       d 2000     0
4       o       f 2000     0
5       a       f 2000     1
6       e       g 2001     0
7       i       h 2002     0
8       i       j 2003     0
9       u       k 2003     1
10      o       l 2004     1
11      a       m 2004     0
12      o       m 2004     0
13      u       n 2005     0
我需要一个脚本,该脚本将添加一个新列“dummycount”,并根据以下条件指定值0或1:

  • 0=对于给定的“nameID”,在“dummy”列中之前没有出现1
  • 1=对于给定的“nameID”,在“dummy”列中至少出现一次1
下面是一个所需输出的示例,我将其放在一起:

   nameID titleID year dummy dummycount
1       a       b 1999     1          0
2       e       c 1999     1          0
3       i       d 2000     0          0
4       o       f 2000     0          0
5       a       f 2000     1          1
6       e       g 2001     0          1
7       i       h 2002     0          0
8       i       j 2003     0          0
9       u       k 2003     1          0
10      o       l 2004     1          0
11      a       m 2004     0          1
12      o       m 2004     0          1
13      u       n 2005     0          1
如您所见,“dummycounts”仅接受值1,前提是“nameID”在“dummy”列中至少有一个先前的、单一的1


谢谢你的帮助

我们需要
lag

library(dplyr)
df1 %>% 
  group_by(nameID) %>%
  mutate(dummycount =  cummax(lag(dummy, default = 0)))
# A tibble: 13 x 5
# Groups:   nameID [5]
#   nameID titleID  year dummy dummycount
#   <chr>  <chr>   <int> <int>      <int>
# 1 a      b        1999     1          0
# 2 e      c        1999     1          0
# 3 i      d        2000     0          0
# 4 o      f        2000     0          0
# 5 a      f        2000     1          1
# 6 e      g        2001     0          1
# 7 i      h        2002     0          0
# 8 i      j        2003     0          0
# 9 u      k        2003     1          0
#10 o      l        2004     1          0
#11 a      m        2004     0          1
#12 o      m        2004     0          1
#13 u      n        2005     0          1
库(dplyr)
df1%>%
分组人(名称ID)%>%
mutate(dummycount=cummax(滞后(虚拟,默认值=0)))
#一个tibble:13x5
#组:nameID[5]
#名称ID标题年份虚拟dummycount
#               
#1 a b 1999 1 0
#2 e c 1999 1 0
#3 i d 2000 0 0
#2000年4月0日
#5 a f 2000 1
#6 e g 2001 0 1
#7 i h 2002 0 0
#8 i j 2003 0 0
α9 U K 2003 2003 1 0
#10 o l 2004 1 0
#上午11时2004分01
#2004年12时01分
#13联合国2005 01
类似地

R> library(dplyr)
R> set.seed(1)
R> df <- data.frame(nameid=rep(c('a','e','i','o','u'),3), dummy=0+(runif(15)<0.3))

R> df %>% group_by(nameid) %>% mutate(dc=seq(length(dummy)) > min(which(dummy==1), Inf))
# A tibble: 15 x 3
# Groups:   nameid [5]
   nameid dummy dc   
   <fct>  <dbl> <lgl>
 1 a          1 FALSE
 2 e          0 FALSE
 3 i          0 FALSE
 4 o          0 FALSE
 5 u          1 FALSE
 6 a          0 TRUE 
 7 e          0 FALSE
 8 i          0 FALSE
 9 o          0 FALSE
10 u          1 TRUE 
11 a          1 TRUE 
12 e          1 FALSE
13 i          0 FALSE
14 o          0 FALSE
15 u          0 TRUE 
R> 
R>库(dplyr)
R> 种子(1)
R> df%group_by(nameid)%%>%mutate(dc=seq(length(dummy))>min(which(dummy==1),Inf))
#一个tibble:15x3
#组:nameid[5]
nameid虚拟dc
1 a 1错误
2 e 0错误
3 i 0错误
4:0错误
5 u 1错误
6 a 0正确
7 e 0错误
8 i 0错误
9:0错误
10 u 1正确
11 a 1正确
12 e 1错误
13 i 0错误
14:0错误
15 u 0正确
R>

用不朽@akrun的话说,我们需要
滞后

library(dplyr)
df1 %>% 
  group_by(nameID) %>%
  mutate(dummycount =  cummax(lag(dummy, default = 0)))

这将为以下每次出现的特定“nameID”保留值1。

!谢谢@akrun!但是,我还需要它为“nameID”的后续每次出现保留值1,而不仅仅是第一次。假设第14行包含nameID=“a”,那么dummycount=1。@LucasE我认为您需要使用
cummax
进行包装。更新了密码,你就像个该死的忍者。我尊重你。谢谢你,伙计!非常感谢。您是否介意告诉我,这种方法如何成为首选方案?我是这个编码行业的新手,我渴望学习!我不知道这是一个更好的方法。
cummax(lag
方法看起来很巧妙。我将其与我想到的其他几种方法进行了对比,结果它赢了,但仅仅是看了看,我很难相信它会比@akrun的解决方案更快。好吧,我想每个人都有自己喜欢的解决问题的方法。不过,感谢您的输入:)