在R中按csv中的值选择行,并将其保存在新的csv文件中
我需要从一个大的csv文件中选择一些值,并使用R将它们保存到一个新文件中。例如,原始表如下所示:在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”的行。 新的
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')")