Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在返回多行R的每行上运行函数_R_Plyr - Fatal编程技术网

在返回多行R的每行上运行函数

在返回多行R的每行上运行函数,r,plyr,R,Plyr,经过大量的实验和谷歌搜索。。。随后再次进行实验,我终于提出了关于StackOverflow的第一个问题:) 我有一个data.frame,希望对data.frame的每一行应用一个自定义函数,expandbaseexpandbase返回由1行或多行组成的data.frame(根据提供给它的数据而有所不同)ExpandBase实际上返回的列比下面的玩具示例中的要多——但为了便于说明: structure(list(id = structure(1:3, .Label = c("a", "b", "

经过大量的实验和谷歌搜索。。。随后再次进行实验,我终于提出了关于StackOverflow的第一个问题:)

我有一个data.frame,希望对data.frame的每一行应用一个自定义函数,
expandbase
expandbase
返回由1行或多行组成的data.frame(根据提供给它的数据而有所不同)
ExpandBase
实际上返回的列比下面的玩具示例中的要多——但为了便于说明:

structure(list(id = structure(1:3, .Label = c("a", "b", "c"), class = "factor"),
startpos = c(1, 2, 3), len = c(1, 2, 3)), .Names = c("id",
"startpos", "len"), row.names = c(NA, -3L), class = "data.frame")


expandBases <- function(startpos, len)
{
    return(data.frame(cy <- startpos + 0:(len - 1)))
}
结构(列表(id=structure(1:3,.Label=c(“a”、“b”、“c”)),class=“factor”), startpos=c(1,2,3),len=c(1,2,3)),.Names=c(“id”, “startpos”,“len”,row.names=c(NA,-3L),class=“data.frame”)
expandBases我必须稍微猜测一下您到底想要什么,但下面是如何使用base R(
do.call
+
lappy
)以及
plyr

创建数据框的辅助函数:

expandBases <- function(x){
  with(x, 
    data.frame(
      id = rep(id, len-1),
      cy = startpos + seq_len(len-1)
      )
   )
}
使用plyr:

library(plyr)
adply(dat, 1, expandBases)[-(1:2)]
  id cy
1  b  3
2  c  4
3  c  5


请注意,我实现了您在问题中描述的函数,但这意味着始终缺少一行。我想那不是你想要的。

有。我知道我对前一个问题的答案:这个,也许还有@csgillespie的也一样。是的,我刚刚意识到我的例子有点错——我刚刚更新了它。不管怎样,您的解决方案都是我想要的,而且非常容易遵循。感谢您提供这两个示例!还有——我认为id应该重复“len”次——这就是其中一行丢失的原因吗?@Lauren是的,我相信是的
len
而不是
len-1
library(plyr)
adply(dat, 1, expandBases)[-(1:2)]
  id cy
1  b  3
2  c  4
3  c  5