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_Csv_Filter - Fatal编程技术网

R 高效过滤数据,无需单一唯一值

R 高效过滤数据,无需单一唯一值,r,loops,csv,filter,R,Loops,Csv,Filter,我正在处理一个大数据集(350000行),在分析数据之前,我必须清理它。数据没有一列可以简单地过滤到其他变量中;相反,它是唯一的,基于以下组合:日期代码,用户id,在特定产品中。用户还可以在同一时间段内拥有多个评级(因为产品可能有多个标准)。我想有效地循环最一般的因素(比如可能先做date)以减少我的计算时间。我(如果可能的话)还想创建动态变量,这是一个问题,因为我需要它的动态性质 因此,我可能会调用数据filtered.{data\u code},然后对于每个唯一的date\u codes,我

我正在处理一个大数据集(350000行),在分析数据之前,我必须清理它。数据没有一列可以简单地过滤到其他变量中;相反,它是唯一的,基于以下组合:日期代码,用户id,在特定产品中。用户还可以在同一时间段内拥有多个评级(因为产品可能有多个标准)。我想有效地循环最一般的因素(比如可能先做date)以减少我的计算时间。我(如果可能的话)还想创建动态变量,这是一个问题,因为我需要它的动态性质

因此,我可能会调用数据
filtered.{data\u code}
,然后对于每个唯一的
date\u code
s,我可能会按
product\u id
进行过滤,并将其分组到
filtered.{date\u code}.{product\u id}
中,最后删除所有重复的
user\u id
,因为它们在每个日期范围内只能有一个。我对移除残疾人没有任何问题,但我确实有一个问题,那就是如何扩大这个范围,因为我可以用硬编码的值进行概念验证

我试过用动态赋值做一些循环,这似乎不是做事情的“R方式”。例如,我想获取原始数据,并按日期代码(目前有四个)将其分块,因此它可能看起来像

DATE_CODE USER_ID PRODUCT_ID PROVIDER_ID
201940    9122321 PROD05241  9100921
201920    9127421 PROD15370  9402929
201840    9122321 PROD05241  9105923
201940    9130825 PROD05241  9600929
201920    9122377 PROD05241  9700900
201740    9199023 PROD05241  9107922
...
最后,我希望每个产品输出自己的CSV文件,每个日期代码输出自己的CSV文件

下面的硬编码示例:

library("dplyr")
library("tidyr")
require(stats)
d <- read.csv("DB_Export-20190831.csv")
product_bydate <- d
product_dates <- c(unique(d$DATE_CODE))

productOfInterest.raw <- subset(d, DATE_CODE == "201840")

user_ids <- data.frame("USER_ID" = unique(productOfInterest.raw$USER_ID))
productOfInterest.noinval <- filter(productOfInterest.raw, RATING != "N/A" & RATING != "" & !is.null(RATING))
productOfInterest.diffrnc <- anti_join(productOfInterest.raw, productOfInterest.noinval, by="USER_ID")
productOfInterest.trim <- productOfInterest.raw

i = 1
for (i in 1:nrow(user_ids)){
  if(user_ids$USER_ID[i] %in% productOfInterest.diffrnc$USER_ID) {
    productOfInterest.trim <- filter(productOfInterest.noinval, USER_ID != user_ids$USER_ID[i])
  }
}

write.csv(productOfInterest.trim, file = "trimmed-07100.csv")
库(“dplyr”)
图书馆(“tidyr”)
需要(统计)

为什么不通过df$id创建一个唯一的id欢迎使用SO。这是一个相当广泛的问题,可以缩小范围。你本质上是在问如何基于多个列进行过滤吗?比尔·奥布莱恩,我想这就是我要问的。我在SQL中做过一些工作,但通常在做这些工作时会引用一个键表。在这里,我只需要根据多列的值进行筛选,并将它们收集在一起,以执行重复数据消除和删除无效条目的操作。