Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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 - Fatal编程技术网

R 将列表列表转换为摘要表

R 将列表列表转换为摘要表,r,R,这里是相对新手。我很难将列表列表转换为更清晰的摘要表。一般来说,我希望对具有多列的数据帧应用多个函数,并获得一个汇总表作为输出,其中行名是函数名,列名与数据帧的列名相同 以下面的示例代码为例。假设我创建以下简单的数据帧: a = seq(100,110,2) b = seq(200,220,4) df = data.frame(a,b) 接下来,假设我创建以下两个示例函数,每个函数都将获取一个数字向量,并生成一个数字: func1 = function(x) sum(x)**2 func2 =

这里是相对新手。我很难将列表列表转换为更清晰的摘要表。一般来说,我希望对具有多列的数据帧应用多个函数,并获得一个汇总表作为输出,其中行名是函数名,列名与数据帧的列名相同

以下面的示例代码为例。假设我创建以下简单的数据帧:

a = seq(100,110,2)
b = seq(200,220,4)
df = data.frame(a,b)
接下来,假设我创建以下两个示例函数,每个函数都将获取一个数字向量,并生成一个数字:

func1 = function(x) sum(x)**2
func2 = function(x) sqrt(sum(x))
然后,我想将这两个函数包装成一个函数,该函数将同时运行这两个函数:

combined_func = function(x){
  combined = list("func1" = func1(x), "func2" = func2(x))
  return(as.data.frame(do.call(rbind, combined)))
}
然后,我将此“组合函数”应用于数据帧的两列,如下所示:

lapply(df, combined_func)
                  a            b
func1   396900.0000 1.587600e+06
func2       25.0998 3.549648e+01
这是我得到的结果:

$a
               V1
func1 396900.0000
func2     25.0998

$b
                V1
func1 1.587600e+06
func2 3.549648e+01
虽然输出在技术上是正确的,但我讨厌格式。如顶部所述,我希望最终结果是函数名作为行名,列名(本例中的“a”和“b”)作为列名。我希望结果如下所示:

lapply(df, combined_func)
                  a            b
func1   396900.0000 1.587600e+06
func2       25.0998 3.549648e+01
过去几天我一直在搜索StackOverflow,但似乎不知道如何实现这一点。非常感谢您的任何帮助

您可以执行以下操作:

combined <- lapply(df, combined_func)

table <- do.call(cbind, combined)

colnames(table) <- list('a', 'b')
这能像你想象的那么简单吗

Reduce(cbind,lappy(df,组合函数))


一种稍微不同的方法,它省去了对
组合功能的需要

funs <- list(func1 = func1, func2 = func2)

t(sapply(funs, mapply, df))

#-----
                a            b
func1 396900.0000 1.587600e+06
func2     25.0998 3.549648e+01


funs您可以将
combined_func
更改为:

combined_func = function(x){
  c("func1" = func1(x), "func2" = func2(x))
}
并用
sapply
调用它:

sapply(df, combined_func)
#             a         b
#func1 396900.0 1587600.0
#func2     25.1      35.5

@kamiks np,我刚刚更新了一个方法来重命名colnames。非常感谢!!!!你解决了长达一周的令人沮丧的问题。我想可能会有一些现成的函数或包,只需将一个数据帧和一系列函数作为参数,并创建这样一个表。但这是可行的。再次感谢你!同样有效!只需要将colname更改为原始dataframe的colname。是的,还需要将
更改为.data.frame(组合)
。给猪剥皮的方法很多,不要太相信自动命名的R。