繁体   English   中英

将pct功能应用于多个数据框

[英]Apply pct function across multiple dataframes

首先感谢谁曾提出这个问题。 我想将pct函数应用于最多十个数据帧(来自caroline程序包)。 由于我拥有的数据会导致溢出错误,因此我必须将所有单元格除以1000。一旦发生这种情况,我可以毫无问题地应用pct函数。 然后,我想修剪原始数据并创建一个新的数据框。

我设法编写了下面的函数,除了不能保存结果(可能缺少返回语句)之外,它可以执行正确的操作。 因此,我可以做很多事情。 但是,这不是最重要的事情。

 require (pct)
 finallist <- list(A, B)

 lapply(finallist , function (foo) {

 temp <-  as.data.frame(foo[,1])
 checks <- cbind(temp, foo[,2:480]/1000)
 checka <- pct(checks, tickerlist)
 foo <- checka[c(1, 481:959)]
 })

这样形成A和B数据帧

  A  <- structure(list(mgrname = c("Man A", "Man A", "Man A", "Man B", "Man  B", "Man B", "Man C", "Man C", "Man C"), 
                  ticker = c("AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA"), 
                  share = c(20L, 30L, 40L, 20L, 10L, 50L, 20L, 20L, 80L)), 
             .Names = c("mgrname", "ticker", "share"), 
             row.names = c(NA, -9L),
             class = "data.frame")

B会一样

真正的关键是尝试写出新的数据帧。 我开始的代码使用了不可见的函数(我认为它应该在某处有一个赋值函数)

  invisible(lapply (names(finalist), 
              function (foo) assign (x = y, value =  temp <-     as.data.frame(foo[,1]),
                 checks <- cbind(temp, foo[,2:480]/1000),
                 checka <- pct(checks, tickerlist),
                 foo <- checka[c(1, 481:959)] , envir =.GlobalEnv)))

但是它说

  Error in lapply(names(finalist), function(foo) assign(x = y, value = temp <- as.data.frame(foo[,  : 
   object 'finalist' not found

最终的数据帧应该看起来像这样

  | mgrname | APPL   | MSFT  | TLSA  |
  |---------|--------|-------|-------|
  | Man A   | .33    |  .5   | .23   |
  | Man B   | .33    |  .16  | .30   |
  | Man C   | .33    |  .33  | .47   |

我发现此代码有效。

首先做操作

 newlist <- lapply(finallist , function (foo) {
 temp <-  as.data.frame(foo[,1])
 checks <- cbind(temp, foo[,2:4]/100)
 checka <- pct(checks, c("AAPL", "MSFT", "TLSA"))
 foo <- checka[c(1, 5:7)]
 })

然后用这个。 命名等有点偏离,但我想我可以解决。

lapply(seq_along(newlist), 
   function(i,x) {assign(paste0("a",i),x[[i]], envir=.GlobalEnv)},
   x=newlist)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM