微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将列添加到 R

如何解决将列添加到 R

我想在下面提到的列表标题旁边添加两列(第一个数据框除外)。

数据框列表的结构 multidf 我想在其中添加

structure(list(`0` = structure(list(X01.04.2020 = 0:1,Asset = c("PORTFOLIO","CASH"),Position = c("--","--"),Price = c("--",Mark.to.Market = c(1000000L,1000000L)),class = "data.frame",row.names = c(NA,-2L)),`1` = structure(list(X02.04.2020 = c(0L,1L,2L,3L,NA),"CASH","FUTURES","VXc1","Total"),"--","500","-5931","Buys:"),"2516","47","1"),Mark.to.Market = c("999231","509866","1258250","-279795","Sells:"),Position.prior = c(NA,NA,0L,1L),Transaction = c("","","TC spent:"),TC.spent = c(NA,629L,140L,769L)),-5L)),`2` = structure(list(X03.04.2020 = c(0L,"505","-6206","2483","45",Mark.to.Market = c("995708","508078","1253789","-278805",500L,-5931L,"5","-275",6L,12L)),`3` = structure(list(X06.04.2020 = c(0L,"522","-7352","2644","42",Mark.to.Market = c("1096915","559989","1380429","-307130",505L,-6206L,"17","-1146",22L,24L,46L)),`4` = structure(list(X07.04.2020 = c(0L,"514","-6863","2642","44",Mark.to.Market = c("1079069","550870","1357988","-302144",522L,-7352L,"-8","489",11L,21L)),`5` = structure(list(X08.04.2020 = c(0L,"524","-7521","2735",Mark.to.Market = c("1138189","580800","1433140","-318702",514L,-6863L,"10","-658",14L,28L)),-5L))),.Dim = 6L,.Dimnames = list(`cumsum(!grepl("\\S",txt))` = c("0","1","2","3","4","5")))

这是预期的结果

Reproducible Example

需要添加到如上所示的数据框列表中的数据框 df3 的结构(可复制示例的最后两列)

structure(c("DOWN","DOWN","FLAT","UP","UP"),.Dim = c(6L,2L))

我已使用以下代码获取数据框列表 multidf 和数据框 df3

#Load the two input files in a data frame
df1 <- read.csv("SP500Preds_20210202.csv")
df2 <- read.csv("vixPredPerfectForesight_20210213.csv")
#Extract and combine the required items to be loaded in final output
df3 <- cbind(df1[,c(3)],df2[,c(3)])
#Load the file that needs to be updated
txt <- readLines("ProcessedTrades.csv")
multidf <- by(txt,cumsum(!grepl("\\S",txt)),FUN = function(x) read.csv(text = x,strip.white = TRUE))

为了得到预期的结果,我使用了以下代码

multidf[-1] <- Map(cbind,multidf[-1],asplit(df3,1))

我收到以下错误

multidf[-1]

谁能帮我解决这个问题? 提前致谢。

在下方添加可重现的 CSV 文件示例

SP500Preds_20210202.csv 或 df1

structure(list(date = c("04/06/19","05/06/19","06/06/19","07/06/19","10/06/19","11/06/19"),prediction_for_date = c("11/6/2019","12/6/2019","13/06/19","14/06/19","17/06/19","18/06/19"),Predictions = c("DOWN","FLAT")),6L),class = "data.frame")

vixPredPerfectForesight_20210213.csv 或 df2

structure(list(date = c(20190604L,20190605L,20190606L,20190607L,20190610L,20190611L),X1.Day.Pred = c("DOWN","DOWN"),X5.Day.Pred = c("UP","UP")),class = "data.frame")  

解决方法

data.frame list 中有 6 个元素 (multidf),matrix 'df3' 中有 6 行。因此,如果打算在每个 list 元素

中创建两个新列
multidf2 <- Map(cbind,multidf,lapply(asplit(df3,1),as.list))

或者用apply

multidf2 <- Map(cbind,apply(df3,1,as.list))

如果我们只需要创建两个空白列,列名如 'df3' 行

multidf2 <-  Map(function(x,y) {x[y] <- ''; x},asplit(df3,1))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。