Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops - Fatal编程技术网

使用r循环和匹配数据

使用r循环和匹配数据,r,loops,R,Loops,我上传了一个csv文件到r,其中大部分是二进制数据。我想做的是根据列“a”中的相应条目操作列“b”中的数据 例如,我希望遍历整个数据集,对于第2列中条目为“1”的每一行,检查以查看同一行中第3列中的条目。然后,找出有多少成功的查询存在 类似地,我有几列大整数,希望通过检查其中一个大数是否大于另一个来确认另一个二进制列。例如,“3”列是“主队获胜”的二元结果,然后我在“主队得分”和“客队得分”列中得到了比赛的得分。我很想创建一个循环,看看“主队获胜”中的条目是否由“主队得分”>“客队得分”中的条目

我上传了一个csv文件到r,其中大部分是二进制数据。我想做的是根据列“a”中的相应条目操作列“b”中的数据

例如,我希望遍历整个数据集,对于第2列中条目为“1”的每一行,检查以查看同一行中第3列中的条目。然后,找出有多少成功的查询存在

类似地,我有几列大整数,希望通过检查其中一个大数是否大于另一个来确认另一个二进制列。例如,“3”列是“主队获胜”的二元结果,然后我在“主队得分”和“客队得分”列中得到了比赛的得分。我很想创建一个循环,看看“主队获胜”中的条目是否由“主队得分”>“客队得分”中的条目确认

谢谢你

像这样的事

library(data.table)
dataset <- data.table(
Homescore = c(2,4,8,0,3,2,3,4),
Awayscore = c(3,2,3,4,2,4,8,0),
Homewin = c(1,0,0,1,1,1,0,1)
)

NoOfSuccess <- dim(
dataset[Homescore > Awayscore & Homewin == 1]
)[1]

NoOfFailure <- dim(
dataset[Homescore > Awayscore & Homewin == 0]
)[1]

NoOfSuccess
#[1] 2
NoOfFailure
#[1] 2
库(data.table)

数据集合并和匹配函数似乎是明显的无循环方法。要求您提供dput输出或代码以提供示例。R用户通常使用矢量化操作而不是循环,因为R中的循环非常慢,除非它们非常简单。这里真正需要做的就是对列名上的布尔表达式求和(使用
&
连接多个布尔表达式)。求和将
TRUE
添加为1,将
FALSE
添加为0,从而增加匹配查询的数量。使用示例数据集编辑您的问题,您将得到更具体的代码答案。
dataset[,sum(Homescore>Awayscore&Homewin==1)]
nrow(dataset[Homescore>Awayscore&Homewin==1])更有效。
。为什么创建一个潜在的大型子集结果,仅仅是为了计算它的行数?@MatthewDowle-我并没有试图在解释思维过程方面非常清楚。就编码效率而言,你完全正确。啊,我明白了。再读一遍这篇文章,一个新用户(Dave)如何能用
data.table
语法如此快速地被设置为正确的,这实际上是相当巧妙的。没有11个以上的函数套件可供学习,只需将逻辑粘贴在
[]
中即可。这真的很简单,不是吗:)对于刚开始使用R的人来说,
data.table
真是太过分了(而且是一种单独的语法)。无论如何,这在BaseR中是很容易做到的。