我想更新CSV文件中的特定行,该文件的日期使用我在r中创建的数据帧。
01/04/20, Asset, Position, Price, Mark-to-Market
0, PORTFOLIO, NA, NA, 1000000
1, CASH, NA, NA, 1000000
02/04/20, Asset, Position, Price, Mark-to-Market, Position prior, Transaction, TC spent
0, PORTFOLIO, NA, NA, 999231, NA, NA, NA
1, CASH, NA, NA, 509866, NA, NA, NA
2, FUTURES, 500, 2516, 1258250, 0, 500, 629
3, VXc1, -5931, 47, -279795, 0, -5931, 140
, Total, Buys:, 1, Sells:, 1, TC spent:, 769
大约有1000+行。
但是,我无法使用以下代码读取此CSV文件。有人能帮我一下吗?
df4 <- read.csv("filename.csv")
此外,我必须在df4的具有日期的行(第一行除外)中添加下面提到的df3中的两列(2和3)。有人能帮我解决这个问题吗?
获取df3的代码如下:但是,我不知道如何在r中选择性地将行添加到df4。
df1 <- read.csv("filename1.csv")
df2 <- read.csv("filename2.csv")
df3 <- cbind(df2[,c(1)], df1[,c(3)], df2[,c(3)])
我不确定你的第二个问题需要什么,但是为了解决第一个问题:
txt <- readLines("filename.csv")
# Warning in readLines("filename.csv") :
# incomplete final line found on 'filename.csv'
multidf <- by(txt, cumsum(!grepl("\S", txt)),
FUN = function(x) read.csv(text = x, strip.white = TRUE))
multidf
# cumsum(!grepl("\S", txt)): 0
# X01.04.20 Asset Position Price Mark.to.Market
# 1 0 PORTFOLIO NA NA 1000000
# 2 1 CASH NA NA 1000000
# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# cumsum(!grepl("\S", txt)): 1
# X02.04.20 Asset Position Price Mark.to.Market Position.prior Transaction TC.spent
# 1 0 PORTFOLIO <NA> NA 999231 NA <NA> NA
# 2 1 CASH <NA> NA 509866 NA <NA> NA
# 3 2 FUTURES 500 2516 1258250 0 500 629
# 4 3 VXc1 -5931 47 -279795 0 -5931 140
# 5 NA Total Buys: 1 Sells: 1 TC spent: 769
multidf
对象在技术上是一个"by"
类对象,但它实际上只是一个美化的list
:
str(multidf)
# List of 2
# $ 0:'data.frame': 2 obs. of 5 variables:
# ..$ X01.04.20 : int [1:2] 0 1
# ..$ Asset : chr [1:2] "PORTFOLIO" "CASH"
# ..$ Position : logi [1:2] NA NA
# ..$ Price : logi [1:2] NA NA
# ..$ Mark.to.Market: int [1:2] 1000000 1000000
# $ 1:'data.frame': 5 obs. of 8 variables:
# ..$ X02.04.20 : int [1:5] 0 1 2 3 NA
# ..$ Asset : chr [1:5] "PORTFOLIO" "CASH" "FUTURES" "VXc1" ...
# ..$ Position : chr [1:5] NA NA "500" "-5931" ...
# ..$ Price : int [1:5] NA NA 2516 47 1
# ..$ Mark.to.Market: chr [1:5] "999231" "509866" "1258250" "-279795" ...
# ..$ Position.prior: int [1:5] NA NA 0 0 1
# ..$ Transaction : chr [1:5] NA NA "500" "-5931" ...
# ..$ TC.spent : int [1:5] NA NA 629 140 769
从这里开始,你可以把它作为一个列表(可以很好,参见https://stackoverflow.com/a/24376207/3358227)或尝试组合成一个框架(相同的链接也有信息)。