Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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_Function_Dataframe - Fatal编程技术网

如何生成一个";“范围”;R中的变量?

如何生成一个";“范围”;R中的变量?,r,function,dataframe,R,Function,Dataframe,我有一个类似以下内容的数据集: Subject Year X A 1990 1 A 1991 1 A 1992 2 A 1993 3 A 1994 4 A 1995 4 B 1990 0 B 1991 1 B 1992 1 B 19

我有一个类似以下内容的数据集:

    Subject Year    X
       A    1990    1
       A    1991    1
       A    1992    2
       A    1993    3
       A    1994    4
       A    1995    4
       B    1990    0
       B    1991    1
       B    1992    1
       B    1993    2
       C    1991    1
       C    1992    2
       C    1993    3
       C    1994    3
       D    1991    1
       D    1992    2
       D    1993    3
       D    1994    4
       D    1995    5
       D    1996    5
       D    1997    6
我想为每个主题生成一个二进制(0/1)变量(比如变量a),表示X变量是否达到3(或1-3)。如果X变量已达到4或更多,则A不应捕获它

应该是这样的:

Subject Year    X   A
   A    1990    1   0
   A    1991    1   0
   A    1992    2   0
   A    1993    3   0
   A    1994    4   0
   A    1995    4   0
   B    1990    0   0
   B    1991    1   0
   B    1992    1   0
   B    1993    2   0
   C    1991    1   1
   C    1992    2   1
   C    1993    3   1
   C    1994    3   1
   D    1991    1   0
   D    1992    2   0
   D    1993    3   0
   D    1994    4   0
   D    1995    5   0
   D    1996    5   0
   D    1997    6   0

我尝试了以下方法:
mydata$A这里有一个基本的R单行使用
ave

df$A <- ave(df$X, df$Subject, FUN = function(x) if (max(x) == 3) 1 else 0)

> df
   Subject Year X A
1        A 1990 1 0
2        A 1991 1 0
3        A 1992 2 0
4        A 1993 3 0
5        A 1994 4 0
6        A 1995 4 0
7        B 1990 0 0
8        B 1991 1 0
9        B 1992 1 0
10       B 1993 2 0
11       C 1991 1 1
12       C 1992 2 1
13       C 1993 3 1
14       C 1994 3 1
15       D 1991 1 0
16       D 1992 2 0
17       D 1993 3 0
18       D 1994 4 0
19       D 1995 5 0
20       D 1996 5 0
21       D 1997 6 0
df$A df
科目年份X A
1A 1990 10
2 A 1991 10
3 A 1992 2 0
4 A 1993 3 0
5 A 1994 4 0
6 A 1995 4 0
7 B 1990 0
8 B 1991 10
9 B 1992 1 0
10 B 1993 2 0
11 C 1991 1
12 C 1992 2 1
13 C 1993 3 1
14 C 1994 3 1
15 D 1991 10
16 D 1992 2 0
17 D 1993 3 0
18 D 1994 4 0
19 D 1995 5 0
20 D 1996 5 0
21 D 1997 6 0

然后,如果您只想捕获增量,则可以使用shift功能访问其他行。这个解决方案是可行的,但第一个值是NA,因为它没有任何可比性

mydata$A <- ifelse(mydata$X > shift(mydata$X, 1L, type="lag"), 1,0) 
mydata$A班次(mydata$X,1L,type=“lag”),1,0)

如果最大x值为3,那么A应该是1?如果受试者
E
的值为2和3,您想标记它吗?还是必须是1,2,3?2,3,1怎么样……老实说,问题还不清楚。通过提供清晰的问题来帮助用户。@SabDeM请告诉我不清楚的地方。我会尽量弄清楚的。@zx8754对不起,我不清楚。X是一个累积变量。你有
C1994 3 1
,但OP说应该是0谢谢,我已经更新了这个问题,但我想我可以把它作为一个新问题发布。但是这个代码工作得很好!也只是
(ave(df$X,df$Subject,FUN=max)==3)+0
probably@Zelazny7如果您有时间,请检查以下问题:
mydata$A <- ifelse(mydata$X > shift(mydata$X, 1L, type="lag"), 1,0)