Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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中按csv中的值选择行,并将其保存在新的csv文件中_R_Csv_Select_Bigdata_Libreoffice Calc - Fatal编程技术网

在R中按csv中的值选择行,并将其保存在新的csv文件中

在R中按csv中的值选择行,并将其保存在新的csv文件中,r,csv,select,bigdata,libreoffice-calc,R,Csv,Select,Bigdata,Libreoffice Calc,我需要从一个大的csv文件中选择一些值,并使用R将它们保存到一个新文件中。例如,原始表如下所示: CODINV2 INCY APPLID 701 BE 15831845 3103 DE 17301283 701 BE 16428865 7802 NL 16285035 8501 IT 15725319 8502 IT 16428857 我只想选择INCY值为“BE”和“IT”的行。 新的

我需要从一个大的csv文件中选择一些值,并使用R将它们保存到一个新文件中。例如,原始表如下所示:

CODINV2   INCY  APPLID
701       BE    15831845
3103      DE    17301283 
701       BE    16428865
7802      NL    16285035
8501      IT    15725319
8502      IT    16428857
我只想选择INCY值为“BE”和“IT”的行。 新的csv文件应如下所示:

CODINV2   INCY  APPLID
701       BE    15831845
701       BE    16428865
8501      IT    15725319
8502      IT    16428857

我们可以在%

subset(df1, INCY %in% c('BE', 'IT'))
#    CODINV2 INCY   APPLID
#1     701   BE 15831845
#3     701   BE 16428865
#5    8501   IT 15725319
#6    8502   IT 16428857

或使用
数据。表格

library(data.table)
setDT(df1, key='INCY')[c('BE', 'IT')]

也许
dplyr
软件包会有所帮助?试试这个:

library("dplyr")

data %>%
    filter(INCY %in% c("BE", "IT")) -> new_data

只需保存新的数据。

这是一个非常基本的问题。我用相对较大的数据集测试了不同的方法

dplyr
是最快的<%+
子集中的code>%速度最慢

text1 <- "
CODINV2   INCY  APPLID
701       BE    15831845
3103      DE    17301283 
701       BE    16428865
7802      NL    16285035
8501      IT    15725319
8502      IT    16428857"

df <- read.table(text=text1, head=T, as.is=T)
df1 <- do.call(rbind, lapply(1:10000, function(x)df))

library(dplyr)
library(microbenchmark)
microbenchmark(
  akrun = subset(df1, INCY %in% c('BE', 'IT')),
  venyao = df1[df1$INCY=="BE"|df1$INCY=="IT", ],
  me = df1[df1$INCY %in% c("BE", "IT"), ],
  marta = df1 %>% filter(INCY %in% c("BE", "IT")),
  times = 10
)
# Unit: milliseconds
#    expr      min       lq     mean   median       uq      max neval cld
#   akrun 5.480150 5.609124 6.396097 5.741517 7.560138 7.757532    10   c
#  venyao 5.209888 5.308072 5.873945 5.401295 5.711413 7.893688    10  bc
#      me 4.769260 4.872918 5.331644 4.910891 5.179100 7.097614    10  b 
#   marta 2.422432 2.563379 2.643739 2.611616 2.766588 2.866825    10 a  

您可以使用
read.csv.sql

library(sqldf)
read.csv.sql("file.csv", sql = "select * from file where INCY IN ('BE', 'IT')")

虽然这不太可能比使用
readr
fread
加载整个表格更快,但在R中进行子集设置。

如何将结果保存到新文件中?@Marta感谢他的评论,并为您的
dplyr
方法加上一条评论。
library(sqldf)
read.csv.sql("file.csv", sql = "select * from file where INCY IN ('BE', 'IT')")