Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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中的for循环_R - Fatal编程技术网

避免R中的for循环

避免R中的for循环,r,R,假设我有两个不同的数据集Data1和Data2。对于Data1$incents中的每个条目,我希望在Data2$incents中找到与其匹配的行,并跟踪不匹配的条目。随后,我将匹配的条目保存到新的数据框Data1\u Matches。现在,对于Data2$incents中的每个条目,我在Data1\u Matches$incents中查找匹配的条目,然后创建一个类似的数据框Data2\u Matches 为便于讨论,假设我的数据集如下所示: Day Incidents "Monday"

假设我有两个不同的数据集
Data1
Data2
。对于
Data1$incents
中的每个条目,我希望在
Data2$incents
中找到与其匹配的行,并跟踪不匹配的条目。随后,我将匹配的条目保存到新的数据框
Data1\u Matches
。现在,对于
Data2$incents
中的每个条目,我在
Data1\u Matches$incents
中查找匹配的条目,然后创建一个类似的数据框
Data2\u Matches

为便于讨论,假设我的数据集如下所示:

Day    Incidents
"Monday"    30
"Friday"    11
"Sunday"    27
Data1_Incs = as.integer(Data1$Incidents)
LEN1     = length(Data1_Incs)
No_Match = 0

for (k in 1:LEN1){
  Incs = which(Data2$Incidents == Data1_Incs[k])
  if (length(Incs) == 0){
    No_Match = c(No_Match,k)
  }
}
No_Match = No_Match[-1]

Data1_Match    <- Data1[-No_Match,]
Data1_No_Match <- Data1[ No_Match,]

Data2_Incs = Data2$Incidents
LEN2       = length(Data2_Incs)
Un_Match   = 0

for (j in 1:LEN2){
  Incs = which(as.integer(Data1_Match$Incidents) == Data2_Incs[j])
  if (length(Incs) == 0){
    Un_Match = c(Un_Match, j)
  }
}
Un_Match = Un_Match[-1]

Data2_Match    <- Data2[-Un_Match,]
Data2_No_Match <- Data2[ Un_Match,]
我目前的算法如下所示:

Day    Incidents
"Monday"    30
"Friday"    11
"Sunday"    27
Data1_Incs = as.integer(Data1$Incidents)
LEN1     = length(Data1_Incs)
No_Match = 0

for (k in 1:LEN1){
  Incs = which(Data2$Incidents == Data1_Incs[k])
  if (length(Incs) == 0){
    No_Match = c(No_Match,k)
  }
}
No_Match = No_Match[-1]

Data1_Match    <- Data1[-No_Match,]
Data1_No_Match <- Data1[ No_Match,]

Data2_Incs = Data2$Incidents
LEN2       = length(Data2_Incs)
Un_Match   = 0

for (j in 1:LEN2){
  Incs = which(as.integer(Data1_Match$Incidents) == Data2_Incs[j])
  if (length(Incs) == 0){
    Un_Match = c(Un_Match, j)
  }
}
Un_Match = Un_Match[-1]

Data2_Match    <- Data2[-Un_Match,]
Data2_No_Match <- Data2[ Un_Match,]
Data1\u Incs=as.integer(Data1$incents)
LEN1=长度(数据1_Incs)
不匹配=0
for(1:LEN1中的k){
Incs=哪个(Data2$incents==Data1\u Incs[k])
如果(长度(增量)==0){
不匹配=c(不匹配,k)
}
}
不匹配=不匹配[-1]

数据1_匹配尝试使用
setdiff

我将在第一个for循环中演示:

No_Match <- setdiff(unique(Data2$Incidents), unique(Data1$Incidents))

No_Match如果您提供每个数据集的一个小的、自包含的样本,那么在什么意义上帮助匹配会容易得多?整排都一样吗?或者您是在使用一列或一组列作为键?@ulfeld我给出的示例数据集并不令人惊讶,但我的意思是在这个意义上进行匹配:对于
Data1
中的每一行,我希望查看
Data2$incents
中是否存在与
Data1
中的单个条目相匹配的条目。如果没有匹配项,我会保存索引,以便将
Data1
分为两个后续数据集:一个有匹配项,一个没有匹配项。@SeñorO我添加了一个代码“可能”样子的小样本。不幸的是,我不能分享实际内容。这个例子看起来有帮助吗?@Mnifldz这并不是很有帮助。阅读本文:可以想象,我不需要使用
setdiff
的for循环,因为它将为我提供
Data2$incents
中不包含的
Data1$incents
中的(唯一)条目,对吗?如果是这样,我如何将
Data1
子集化,以仅包含
No_Match
中未包含的事件?这将为您提供实际值,从而消除获取子集然后对数据集进行子集化的额外步骤。谢谢
setdiff
是我所需要的。我能够完全删除for循环,我的脚本现在运行得非常快。