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