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

R 如果存在缺勤,是否删除缺勤数据?

R 如果存在缺勤,是否删除缺勤数据?,r,sorting,if-statement,delete-row,R,Sorting,If Statement,Delete Row,我在R中有这样一个数据集: ROW_NAMES PRES_AB LON LAT 56129606 1 -109.8236 44.11312 56129606 0 -109.8236 44.11312 56129607 1 -109.7474 44.10961 56129607 0 -109.7474 44.10961 56129608 0 -109.6709 44.12

我在R中有这样一个数据集:

ROW_NAMES   PRES_AB  LON       LAT    

56129606       1     -109.8236 44.11312
56129606       0     -109.8236 44.11312
56129607       1     -109.7474 44.10961
56129607       0     -109.7474 44.10961
56129608       0     -109.6709 44.12495
56129609       0     -109.6285 44.11815
56129610       0     -109.5649 44.11377
56129611       0     -109.4849 44.11273
56129611       1     -109.4849 44.11273
第1列是我分配给怀俄明州USDA地块名称行的名称,第2列是地块中物种的存在/不存在数据,第3列是地块的经度坐标,第4列是地块的纬度坐标

您可以看到,前两行将存在(
PRES_AB=1
)和不存在(
PRES_AB=0
)分配给相同的绘图(
56129606
)。第三行和第四行以及最后两行也是如此。如果存在绘图(如果已经存在
PRES_AB=1
),我想删除
PRES_AB=0
的行。然后,我的数据应该如下所示:

ROW_NAMES   PRES_AB  LON       LAT    

56129606       1     -109.8236 44.11312
56129607       1     -109.7474 44.10961
56129608       0     -109.6709 44.12495
56129609       0     -109.6285 44.11815
56129610       0     -109.5649 44.11377
56129611       1     -109.4849 44.11273

顺便说一句,这是一个包含81000行的数据集,我只是展示了其中的一部分。

假设您的数据位于数据框
a
中,那么这应该可以做到:

a[!(a$ROW_NAMES %in% a[a$PRES_AB==1,'ROW_NAMES'] & a$PRES_AB==0),]

假设您的数据在数据帧
a
中,那么这应该可以做到:

a[!(a$ROW_NAMES %in% a[a$PRES_AB==1,'ROW_NAMES'] & a$PRES_AB==0),]

这可以使用子集设置和%函数中的
%

> test.data <- data.frame(cbind(ROW_NAMES=c("A", "A", "B", "C", "D", "D"), PRES_AB=c(1,0,1,0,1,0), OTHER_DATA=c("bla", "bla", "bla", "etc", "etc", "etc")))
> test.data
  ROW_NAMES PRES_AB OTHER_DATA
1         A       1        bla
2         A       0        bla
3         B       1        bla
4         C       0        etc
5         D       1        etc
6         D       0        etc


> test.data[!(test.data[,"ROW_NAMES"] %in% (test.data[test.data[,"PRES_AB"]==1, "ROW_NAMES"]) & (test.data[,"PRES_AB"]==0)),]

  ROW_NAMES PRES_AB OTHER_DATA
1         A       1        bla
3         B       1        bla
4         C       0        etc
5         D       1        etc
>test.data test.data
行名称PRES_AB其他数据
1 A 1 bla
2 A 0 bla
3 B 1 bla
4 C 0等
5、D、1等
6d0等
>test.data[!(test.data[,“ROW_NAMES”]%in%(test.data[test.data[,“PRES_AB”]=1,“ROW_NAMES”])和(test.data[,“PRES_AB”]=0)),]
行名称PRES_AB其他数据
1 A 1 bla
3 B 1 bla
4 C 0等
5、D、1等

这可以使用子集设置和%
中的
%功能来完成:

> test.data <- data.frame(cbind(ROW_NAMES=c("A", "A", "B", "C", "D", "D"), PRES_AB=c(1,0,1,0,1,0), OTHER_DATA=c("bla", "bla", "bla", "etc", "etc", "etc")))
> test.data
  ROW_NAMES PRES_AB OTHER_DATA
1         A       1        bla
2         A       0        bla
3         B       1        bla
4         C       0        etc
5         D       1        etc
6         D       0        etc


> test.data[!(test.data[,"ROW_NAMES"] %in% (test.data[test.data[,"PRES_AB"]==1, "ROW_NAMES"]) & (test.data[,"PRES_AB"]==0)),]

  ROW_NAMES PRES_AB OTHER_DATA
1         A       1        bla
3         B       1        bla
4         C       0        etc
5         D       1        etc
>test.data test.data
行名称PRES_AB其他数据
1 A 1 bla
2 A 0 bla
3 B 1 bla
4 C 0等
5、D、1等
6d0等
>test.data[!(test.data[,“ROW_NAMES”]%in%(test.data[test.data[,“PRES_AB”]=1,“ROW_NAMES”])和(test.data[,“PRES_AB”]=0)),]
行名称PRES_AB其他数据
1 A 1 bla
3 B 1 bla
4 C 0等
5、D、1等

我的答案分为两步,因为这通常是我思考选择哪一行的逻辑的方式

首先,我创建一个列,列中包含关于每个
行名的观察次数的信息

require(plyr)
# Add column with information on how many observations for each ROW_NAME
dat1 = ddply(dat1, .(ROW_NAMES), transform, numid = length(PRES_AB) )
一旦我有了这些信息,我就可以使用逻辑运算符只提取少于2个观察值或(如果超过1个观察值)PRES_AB为1的行名称

# subset dataset with subset() (or use extract, "[")
   # remove extra column "numid" for neatness
subset(dat1, numid < 2 | PRES_AB == 1, -numid)
#具有subset()的子集数据集(或使用extract,“[”)
#移除额外的“numid”列以保持整洁
子集(dat1,numid<2 | PRES_AB==1,-numid)

我的答案分为两步,因为这通常是我思考选择哪一行的逻辑的方式

首先,我创建一个列,列中包含关于每个
行名的观察次数的信息

require(plyr)
# Add column with information on how many observations for each ROW_NAME
dat1 = ddply(dat1, .(ROW_NAMES), transform, numid = length(PRES_AB) )
一旦我有了这些信息,我就可以使用逻辑运算符只提取少于2个观察值或(如果超过1个观察值)PRES_AB为1的行名称

# subset dataset with subset() (or use extract, "[")
   # remove extra column "numid" for neatness
subset(dat1, numid < 2 | PRES_AB == 1, -numid)
#具有subset()的子集数据集(或使用extract,“[”)
#移除额外的“numid”列以保持整洁
子集(dat1,numid<2 | PRES_AB==1,-numid)