如何将两列csv转换为第二列的向量?

Posted

技术标签:

【中文标题】如何将两列csv转换为第二列的向量?【英文标题】:How to convert a two column csv into a vector of the second column? 【发布时间】:2019-08-14 08:04:56 【问题描述】:
> temp = list.files(pattern="*.csv")
> myfiles = lapply(temp, read.csv)

我正在使用上述代码读取多个 csv 文件。结果是每个 cvs 文件都以以下形式读取:

> myfiles
[[1]]
         Date   Payment
1  19/10/2003 -13275.00
2  19/11/2003    940.49
3  19/12/2003    884.71
4  19/01/2004    832.11
5  19/02/2004    782.49
6  19/03/2004    735.74
7  19/04/2004    691.64
8  19/05/2004    650.09
9  19/06/2004    610.91
10 19/07/2004    573.99
11 19/08/2004    539.20
12 19/09/2004    506.42
13 19/10/2004    475.54
14 19/11/2004    441.05
15 19/12/2004    413.91
16 19/01/2005    388.37
17 19/02/2005    364.31
18 19/03/2005    341.66
19 19/04/2005    320.34
20 19/05/2005    300.28
21 19/06/2005    281.39
22 19/07/2005    263.63
23 19/08/2005    246.91
24 19/09/2005    231.20
25 19/10/2005    216.41
26 19/11/2005    202.51
27 19/12/2005    189.43
28 19/01/2006    177.15
29 19/02/2006    165.60
30 19/03/2006    154.75
31 19/04/2006    144.55
32 19/05/2006    134.98
33 19/06/2006    125.99
34 19/07/2006    117.55
35 19/08/2006    109.62
36 19/09/2006    102.18

但是我需要以这种形式阅读 csv 文件:


> read.csv("cashflows1.csv", skip=1, header=F)$V2


[1] -13275.00    940.49    884.71    832.11    782.49    735.74    691.64    650.09    610.91    573.99    539.20
[12]    506.42    475.54    441.05    413.91    388.37    364.31    341.66    320.34    300.28    281.39    263.63
[23]    246.91    231.20    216.41    202.51    189.43    177.15    165.60    154.75    144.55    134.98    125.99
[34]    117.55    109.62    102.18


有没有办法让我更改 "> myfiles = lapply(temp, read.csv)" 以便它以所需格式读取所有 csv 文件(第二列的向量,标题为“付款”) .

【问题讨论】:

哈?为什么不使用lapply(temp, function(x) read.csv(x, skip=1, header=F)$V2) 你需要c(sapply(myfiles, `[[`, 2)) 吗? 这正是我要找的,谢谢! 【参考方案1】:

读取myfiles 中的文件后,您可以对第二列进行子集化并将其转换为向量

c(sapply(myfiles, `[[`, 2))

或者使用列名

c(sapply(myfiles, `[[`, "Payment"))

【讨论】:

【参考方案2】:

我们可以使用map

library(purrr)
unlist(map(myfiles, pluck, 'Payment'))

另外,我们可以使用freadselect 来只读取选定的列

library(data.table)
unlist(lapply(temp, fread, select = "Payment"))

【讨论】:

以上是关于如何将两列csv转换为第二列的向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两列转换为用于计数矢量化的序列?

将python字典写入CSV列:第一列的键,第二列的值

如何用两列 C++ 从文本文件中填充向量

在SQL中,如何将两列的数据相乘以获得第三列

批处理文件:将两列的字符串组合到另一列中

EXCEL如何把第二列的数据按照第一列数据排序,且第二列的数据少于第一列?