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

R 基于另一个值的值对列变量的值范围进行子集设置

R 基于另一个值的值对列变量的值范围进行子集设置,r,range,subset,R,Range,Subset,我试图将我的所有行保留在数据框中,但删除表2中的行,这些行不属于表8中至少2年的行 library(tidyverse) forms <- data_frame( CASEID = rep(01012,5), VISIT = c(450, 450, 365, 365, 450), FORM = c(18, 8, 7, 2, 2), DTYvisit = c(2006, 2006, 2003, 2003, 2006) ) > forms # A tibble: 5 x 4

我试图将我的所有行保留在数据框中,但删除表2中的行,这些行不属于表8中至少2年的行

library(tidyverse)   

forms <- data_frame( CASEID = rep(01012,5), VISIT = c(450, 450, 365, 365, 450), FORM = c(18, 8, 7, 2, 2), DTYvisit = c(2006, 2006, 2003, 2003, 2006) )

> forms # A tibble: 5 x 4

CASEID VISIT FORM YEAR   

<dbl> <dbl> <dbl> <dbl>   

1 1012 450 18 2006

2 1012 450 8 2006

3 1012 365 7 2003

4 1012 365 2 2003

5 1012 450 2 2004

6 1013 450 8 2003

7 1013 450 18 2003

8 1013 450 2 2003

9 1012 450 2 2009
关于如何删除不在表8 DTyvisit<2年范围内的表2行,有什么建议吗

这非常有效:

form2.matchedOnForm8 <- forms %>% group_by(CASEID) %>% filter(FORM == 8) %>% select(CASEID, VISIT, DTYvisit) %>% left_join(filter(forms, FORM == 2), by = c("CASEID", "VISIT", "DTYvisit")) %>% bind_rows(filter(forms, FORM != 2))
但现在我失去了观察

我需要以下资料:

library(tidyverse)

forms <- data_frame( CASEID = rep(01012,5), VISIT = c(450, 450, 365, 365, 450), FORM = c(18, 8, 7, 2, 2), DTYvisit = c(2006, 2006, 2003, 2003, 2006) )

> forms # A tibble: 5 x 4

CASEID VISIT FORM YEAR   

<dbl> <dbl> <dbl> <dbl>

1 1012 450 18 2006

2 1012 450 8 2006

3 1012 365 7 2003

4 1012 450 2 2004

5 1013 450 8 2003

6 1013 450 18 2003

7 1013 450 2 2003
下面是一个使用outer来计算给定年份和8中可能存在的所有年份值之间的差异的解决方案

min(abs(as.numeric(outer(df[df$FORM==8,'YEAR'],df[1,'YEAR'],'-'))))
[1] 0

df$diff <- apply(df, 1, function(x) min(as.numeric(outer(df[df$FORM==8,'YEAR',drop=TRUE],as.numeric(x['YEAR']),'-'))))

library(dplyr)
df %>% group_by(CASEID) %>% 
       filter(!(FORM==2 & abs(diff)>2))


df <- read.table(text="
    CASEID VISIT FORM YEAR   

                           1 1012 450 18 2006

                           2 1012 450 8 2006

                           3 1012 365 7 2003

                           4 1012 365 2 2003

                           5 1012 450 2 2004

                           6 1013 450 8 2003

                           7 1013 450 18 2003

                           8 1013 450 2 2003

                           9 1012 450 2 2009
                             ",header=T, stringsAsFactors = F)

很抱歉,我无法理解你的问题。我丢失了一些观察结果,因为一些ID的表格2与表格8的日期不相等。因此,现在我需要确保我保持中二的时间等于中八年,保持中二的时间在中八采取的2年之内。这是一个非常复杂的问题,我的中间经验似乎没有切分蛋糕。为什么这个案例4 1012 365 2 2003没有包括在预期的输出中。我得到了一个错误:>minabass.numericouterNPforms.sec2.qol.labs[NPforms.sec2.qol.labs$FORM==8,'DTYvisit'],NPforms.sec2.qol.labs[1,'DTYvisit'],'-'FUNX,Y中的错误, ... : 二进制运算符的非数值参数它们是整数,但我将它们更改为数值,仍然得到:FUNX中的错误,Y,…:二进制运算符StructureListCaseId=01012,VISIT=450,FORM=18,DTYvisit=2006,SDPRS=09,SDRS=076,TMMN=019,TMANE=00,TMANP=25,TMAPR=00,TMBMN=051,TMBNE=00,TMBNP=25,TMBPR=00,COUNT=03,BORNY=NA_整数,EDUCY=NA_字符,HANDD=NA_整数,HXLEA=NA_整数,HXLOC=NA_integer,NLANG=NA_integer,RACE=NA_integer,它需要是一个数据表吗?是的,我有一个表格8:>NPforms.sec2.qol.labs[NPforms.sec2.qol.labs$form==8,DTYvisit]a表:1388 x 1 DTYvisit 1 2006 2 2005 3 2005 4 2005 5 2005 6 2008 7 2005 8 2005 9 2005 10 2006。。。还有1378行>NPforms.sec2.qol.labs[1,DTYvisit]A tible:1 x 1 DTYvisit 1 2006->仍然无法工作。也许我在什么地方遗漏了双括号?或者也许有一种dplyr方法可以做到这一点?