R 高效过滤数据,无需单一唯一值
我正在处理一个大数据集(350000行),在分析数据之前,我必须清理它。数据没有一列可以简单地过滤到其他变量中;相反,它是唯一的,基于以下组合:日期代码,用户id,在特定产品中。用户还可以在同一时间段内拥有多个评级(因为产品可能有多个标准)。我想有效地循环最一般的因素(比如可能先做date)以减少我的计算时间。我(如果可能的话)还想创建动态变量,这是一个问题,因为我需要它的动态性质 因此,我可能会调用数据R 高效过滤数据,无需单一唯一值,r,loops,csv,filter,R,Loops,Csv,Filter,我正在处理一个大数据集(350000行),在分析数据之前,我必须清理它。数据没有一列可以简单地过滤到其他变量中;相反,它是唯一的,基于以下组合:日期代码,用户id,在特定产品中。用户还可以在同一时间段内拥有多个评级(因为产品可能有多个标准)。我想有效地循环最一般的因素(比如可能先做date)以减少我的计算时间。我(如果可能的话)还想创建动态变量,这是一个问题,因为我需要它的动态性质 因此,我可能会调用数据filtered.{data\u code},然后对于每个唯一的date\u codes,我
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中做过一些工作,但通常在做这些工作时会引用一个键表。在这里,我只需要根据多列的值进行筛选,并将它们收集在一起,以执行重复数据消除和删除无效条目的操作。