天道酬勤,学无止境

将函数应用于 data.frame 的每一列并组织输出(Apply a function to each column of a data.frame and organize the output)

问题

我有这个向量:

 x <- c(5,2,-4,-6,-2,1,4,2,-3,-6,-1,8,9,5,-6,-11)

我使用这个功能:

myfunction <- function(x){
     n <- length(x)
     fx <- numeric(n)
     fx[1] <- min(x[1],0)
     for(i in 2:n){fx[i] <- min(0,fx[i-1]+x[i])}
     fx

     x_min <-min(x)
     fx_min <- min(fx)

     fx_05 <- numeric(n)
     fx_05[1] <- min(fx[1],0)
     for (i in 2:n) {
       if (sum(fx_05[i-1]+x[i])>0) {  
          fx_05[i] <- 0
       } else if ((sum(fx_05[i-1]+x[i]))<(fx_min*0.5)) {
          fx_05[i] <- (fx_min*0.5)
       } else { fx_05[i] <- sum(fx_05[i-1]+x[i]) }
     }
     fx_05
     as.data.frame(matrix(c(x, fx_05), ncol = 2 ))
}
xx <- myfunction(x)

数据框xx

    V1   V2
1    5  0.0
2    2  0.0
3   -4 -4.0
4   -6 -8.5
5   -2 -8.s
6    1 -7.5
7    4 -3.5
8    2 -1.5
9   -3 -4.5
10  -6 -8.5
11  -1 -8.5
12   8 -0.5
13   9  0.0
14   5  0.0
15  -6 -6.0
16 -11 -8.5`

我想将此功能应用于 data.frame :

df <- data.frame(x <- c(5,2,-4,-6,-2,1,4,2,-3,-6,-1,8,9,5,-6,-11),
                   y <- c(5,2,-4,-6,-2,1,4,2,-3,-6,-1,8,9,5,-6,-11),
                   z <- c(5,2,-4,-6,-2,1,4,2,-3,-6,-1,8,9,5,-6,-11))

使用:

output <- myfunction(df) 

它不起作用,并使用:

outputs <- data.frame(sapply(df, myfunction))

data.frame 输出的形式不正确。 data.frame 的每个原始列应该是 2 列。

回答1

在这种情况下,您想使用lapply 。 它将处理 data.frame 的每一列,因为它实际上是一个等长向量的列表,并且每个返回一个两列 data.frame。

x <- lapply(df, myfunction)

此外, sapply工作得很好。 唯一的区别是它在开始时看起来不同。 有关所有解决方案之间的差异,请参见print(x)

x <- sapply(df, myfunction)

之后,您可能希望再次将它们从列表组合到 data.frame 中。 你可以用do.call做到这一点

df2 <- do.call(cbind, x)

这会弄乱列名。 您可以使用names更改这些

names(df2) <- NULL
df2
# 1    5  0.0   5  0.0   5  0.0
# 2    2  0.0   2  0.0   2  0.0
# 3   -4 -4.0  -4 -4.0  -4 -4.0
# 4   -6 -8.5  -6 -8.5  -6 -8.5
# ....

边注:

如果您没有 data.frame 而是一个矩阵作为输入,另一个选项将apply于 with MARGIN = 2

x <- apply(df, MARGIN = 2, myfunction)

虽然在这个例子中,它也可以工作,但是当你的向量中有不同的数据类型时,你会遇到麻烦,因为它会在应用函数之前将 data.frame 转换为矩阵。 因此不推荐。 可以在这篇详细且易于理解的帖子中找到更多信息!

进一步阅读:
Hadley Wickham 的 Advanced R. 另请查看本网站上有关数据类型的部分。
彼得·沃纳的博客文章


我非常感谢@Gregor 在这篇文章中的投入。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • dplyr:将函数 table() 应用于 data.frame 的每一列(dplyr: apply function table() to each column of a data.frame)
    问题 使用 dplyr 将函数 table() 应用于 data.frame 的每一列 我经常使用plyr在数据框的每一列上应用表函数,如下所示: library(plyr) ldply( mtcars, function(x) data.frame( table(x), prop.table( table(x) ) ) ) 是否也可以在dplyr 中执行此操作? 我的尝试失败了: mtcars %>% do( table %>% data.frame() ) melt( mtcars ) %>% do( table %>% data.frame() ) 回答1 您可以尝试以下不依赖于tidyr包的方法。 mtcars %>% lapply(table) %>% lapply(as.data.frame) %>% Map(cbind,var = names(mtcars),.) %>% rbind_all() %>% group_by(var) %>% mutate(pct = Freq / sum(Freq)) 回答2 通常,您可能不想在数据框的每一列上运行table() ,因为至少有一个变量是唯一的(一个id字段)并产生很长的输出。 但是,您可以使用group_by()和tally()来获取dplyr链中的频率表。 或者您可以使用count() group_by(
  • 在多列上应用 tidyr::separate(Apply tidyr::separate over multiple columns)
    问题 我想遍历数据框中的列并根据分隔符将它们拆分为 。 我正在使用tidyr::separate ,它在我一次做一列时有效。 例如: df<- data.frame(a = c("5312,2020,1212"), b = c("345,982,284")) df <- separate(data = df, col = "a", into = paste("a", c("col1", "col2", "col3"), sep = "_"), sep = ",") 返回: a_col1 a_col2 a_col3 b 1 5312 2020 1212 345,982,284 当我尝试对df R 的每一列执行相同的操作时返回错误 例如我用这个 for 循环: for(col in names(df)){ df <- separate(data = df, col = col, into = paste(col, c("col1", "col2", "col3), sep = "_"), sep = ",") } 我期待得到以下输出: a_col1 a_col2 a_col3 b_col1 b_col2 b_col3 1 5312 2020 1212 345 982 284 但是 R 返回此错误: Error in if (!after) c(values, x) else if
  • 如何对数据的每一列应用函数?(how to apply a function on every column of a data?)
    问题 我问了一个问题,我得到了一个很好的答案,它解决了我的问题。 但是,我想修改代码(这是我之前的问题)。 在两个不同数据框的每一行中找到相似的字符串 我试着再次解释这个问题以及我是如何处理它的 Karsten W. 的回答给了我一个规范化的数据(为每个元素中的每个字符串分配一个位置)如下(我没有改变它) normalize <- function(x, delim) { x <- gsub(")", "", x, fixed=TRUE) x <- gsub("(", "", x, fixed=TRUE) idx <- rep(seq_len(length(x)), times=nchar(gsub(sprintf("[^%s]",delim), "", as.character(x)))+1) names <- unlist(strsplit(as.character(x), delim)) return(setNames(idx, names)) } 第二部分是分别在每一列上应用上述函数,因此如果我需要在 1000 列上执行此操作,则非常耗时。 相反,我在评论中执行以下操作,我尝试使用lappy # s1 <- normalize(df1[,1], ";") # s2 <- normalize(df1[,2], ";") 我喜欢这个 myS <- lapply(df1
  • 使用字典映射将格式应用于数据框中的每一列(Apply Formatting to Each Column in Dataframe Using a Dict Mapping)
    问题 问题设置 import pandas as pd df = pd.DataFrame(data={'Currency': {0: 111.23, 1: 321.23}, 'Int': {0: 23, 1: 3}, 'Rate': {0: 0.03030, 1: 0.09840}} ) 产生以下数据帧 Currency Int Rate 0 111.23 23 0.0303 1 321.23 3 0.0984 我想使用如下所示的字典对数据框中的每一列应用非常具体的格式: format_mapping={'Currency': '${:,.2f}', 'Int': '{:,.0f}', 'Rate': '{:.2f}%'} 我知道我可以将 applymap 用于多列或应用于单列: #All columns df = df.applymap('{:.2f}%'.format) #Specific columns df['Rate'] = df['Rate'].apply('{:.2f}%'.format) 问题 如何遍历数据框中的每一列并使用字典应用格式,其中dict key是column , value是string格式? 最终结果看起来像这样(暂时忽略百分比没有乘以 100 的事实) Currency Int Rate 0 $111.23 23 0.03% 1 $321.23
  • 将函数应用于 Spark DataFrame 的每一行(Apply function to each row of Spark DataFrame)
    问题 我在 Spark 1.3 上。 我想对数据帧的每一行应用一个函数。 此函数对行的每一列进行散列并返回散列列表。 dataframe.map(row => row.toSeq.map(col => col.hashCode)) 运行此代码时出现 NullPointerException。 我认为这与 SPARK-5063 有关。 如果不使用嵌套地图,我想不出一种方法来实现相同的结果。 回答1 这不是 SPARK-5063 的实例,因为您没有嵌套 RDD 转换; 内部.map()被应用于 Scala Seq ,而不是 RDD。 我的预感是数据集中的某些行包含空列值,因此当您尝试计算null.hashCode时,某些col.hashCode调用会抛出 NullPointerExceptions。 为了解决这个问题,您需要在计算哈希码时考虑空值。 如果您在 Java 7 JVM 或更高版本(源)上运行,您可以 import java.util.Objects dataframe.map(row => row.toSeq.map(col => Objects.hashCode(col))) 或者,在早期版本的 Java 上,您可以执行以下操作 dataframe.map(row => row.toSeq.map(col => if (col == null) 0 else col
  • 在数据框的每一列中填写 NA 的平均值 [重复](Fill in mean values for NA in every column of a data frame [duplicate])
    问题 这个问题在这里已经有了答案: 用列均值替换缺失值(12 个回答) 5年前关闭。 如果我有一个数据框 df df=data.frame(x=1:20,y=c(1:10,rep(NA,10)),z=c(rep(NA,5),1:15)) 我知道用给定列的平均值替换 NAs,我们可以使用 df[is.na(df$x)]=mean(df$x,na.rm=T) 我试图找到的是一种使用单个命令的方法,以便它一次对列执行此操作,而不是对每一列重复执行。 怀疑,我需要使用 sapply 和函数,我尝试过这样的事情,但显然这不起作用 sapply(df,function(x) df[is.na(df$x)]=mean(df$x,na.rm=T)) 任何建议都会很棒。 我试图搜索以前的帖子,但找不到类似的问题正在解决。 回答1 我们可以使用na.aggregate 。 一种选择是在每列上单独应用na.aggregate 。 我们可以用lapply做到这lapply 。 如果我们使用data.table ,将 'data.frame' 转换为 'data.table' ( setDT(df) ),遍历列并应用na.aggregate 。 这将用非 NA 值的平均值替换 NA。 library(zoo) library(data.table) setDT(df)[, names(df) :=
  • 使用聚合将多个函数应用于数据框中的每一列(Applying multiple functions to each column in a data frame using aggregate)
    问题 当我需要将多个函数依次应用于多列并按多列聚合并希望将结果绑定到数据框中时,我通常按以下方式使用aggregate() : # bogus functions foo1 <- function(x){mean(x)*var(x)} foo2 <- function(x){mean(x)/var(x)} # for illustration purposes only npk$block <- as.numeric(npk$block) subdf <- aggregate(npk[,c("yield", "block")], by = list(N = npk$N, P = npk$P), FUN = function(x){c(col1 = foo1(x), col2 = foo2(x))}) 通过使用以下方法可以在有序的数据框中获得结果: df <- do.call(data.frame, subdf) 我是否可以通过在这种情况下以某种方式使用更智能的aggregate()来避免调用do.call()或从一开始就使用另一个基本R解决方案来缩短整个过程? 回答1 作为@akrun建议, dplyr的summarise_each是非常适合的任务。 library(dplyr) npk %>% group_by(N, P) %>% summarise_each(funs(foo1
  • pandas agg和apply function有什么区别?(What is the difference between pandas agg and apply function?)
    问题 我无法弄清楚Pandas .aggregate和.apply函数之间的区别。 以以下示例为例:我加载数据集,执行groupby ,定义一个简单函数,然后使用.agg或.apply 。 如您所见,在使用.agg和.apply之后,函数中的.agg语句将产生相同的输出。 另一方面,结果是不同的。 这是为什么? import pandas import pandas as pd iris = pd.read_csv('iris.csv') by_species = iris.groupby('Species') def f(x): ...: print type(x) ...: print x.head(3) ...: return 1 使用apply : by_species.apply(f) #<class 'pandas.core.frame.DataFrame'> # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #0 5.1 3.5 1.4 0.2 setosa #1 4.9 3.0 1.4 0.2 setosa #2 4.7 3.2 1.3 0.2 setosa #<class 'pandas.core.frame.DataFrame'> # Sepal.Length Sepal.Width
  • R:将函数应用于以向量元素为参数的矩阵(R: Apply function to matrix with elements of vector as argument)
    问题 假设我想对矩阵的每一行应用一个函数。 该函数的参数之一采用向量。 我想将向量的第一个元素应用于第一行,将第二个元素应用于第二行,依此类推。 例如: set.seed(123) df<-matrix(runif(100), ncol=10) var2 <- c(1:10) MYFUNC <- function(x, Var=NA){ sum(x)/Var } 我试过这个: apply(df, 1, function(x) MYFUNC(x, Var=var2)) 但这给了我一个 10x10 的矩阵,其中的函数应用于每一行和 Var 组合,而我只对对角线元素感兴趣。 我还研究了mapply函数,但我不确定如何在这种情况下应用它。 任何帮助将非常感激。 回答1 Mapply绝对是一种可能性。 这应该有效: mapply(MYFUNC, x = as.data.frame(t(df)), Var = var2) #V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 #5.0795111 2.8693537 1.8285747 1.3640238 0.8300597 0.6280441 0.7706310 0.6720132 0.5719003 0.4259674 我认为您遇到的问题是mapply采用向量或列表。 在 R 中,矩阵不是列表,但data.frame是。
  • pandas使用总结(很详细!)
    一,pandas介绍: pandas是BSD许可的开源库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具。长期以来,Python在处理数据和准备数据方面一直很出色,但在数据分析和建模方面却不那么出色。pandas帮助填补了这一空白,使您能够在Python中执行整个数据分析工作流,而不必切换到R等更具领域特定性的语言。与出色的IPython工具包和其他库结合使用,在Python中进行数据分析的环境在性能,生产力和协作能力方面表现出色。 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。 二,pandas的使用: Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。 DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。 1.导包: import pandas as pd import numpy as np from pandas import Series
  • R:如何将移动平均值应用于数据框中的列子集?(R: How to apply moving averages to subset of columns in a data frame?)
    问题 我有一个数据框 (training.set),它包含 83 个变量的 150 个观察值。 我想用一些移动平均线转换其中的 82 列。 问题是结果最终只有 150 个数值(即 1 列)。 我将如何在数据中的每一列上单独应用移动平均函数并保持第 83 列不变? 我觉得这超级简单,但我找不到解决方案。 我当前的代码 # apply moving average on training.set data to 82 of 83 rows library(TTR) #load TTR library for SMA functions ts.sma <- SMA(training.set[,1:82], n = 10) ts.sma 谢谢你的帮助。 回答1 apply(training.set[,1:82], 2, SMA, n=10) 请注意,这会将您的 data.frame 转换为矩阵 - 如果您需要输出为 data.frame, data.frame(...)其包装在data.frame(...) 。
  • Python Pandas:使用“应用”将 1 个函数应用于多列(Python Pandas: Using 'apply' to apply 1 function to multiple columns)
    问题 快速 Pandas DataFrame 问题...只是一个概念性问题 假设我有一个 3 列的 DataFrame。 称之为df : A B C 0 1 2 3 1 1 2 3 2 1 2 3 3 1 2 3 4 1 2 3 现在假设我有一个函数f(A,B,C) ,理论上它会将A 、 B和C列作为输入。 例如, def function(A,B,C): return (A+1, B/2, C*3) 当然,这个函数返回一个元组。 本质上,我想知道是否可以将function应用于df以获得以下输出: A B C 0 2 1 9 1 2 1 9 2 2 1 9 3 2 1 9 4 2 1 9 如果是这样,我该怎么做? 我不能只输入df.apply(function) 。 我会得到一个 TypeError,内容如下: 'function()' takes exactly 3 arguments (1 given)' 如果我不能这样做,我想我必须创建单独的函数? 喜欢... def f1(A): return A+1 def f2(B): return B/2 def f3(C): return C*3 回答1 你可以这样做: >>> pandas.concat(function(*[col for colname, col in df.iteritems()]), axis=1) A
  • 熊猫轴是什么意思?(What does axis in pandas mean?)
    问题 这是我的生成数据框的代码: import pandas as pd import numpy as np dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB')) 然后我得到了数据框: +------------+---------+--------+ | | A | B | +------------+---------+--------- | 0 | 0.626386| 1.52325| +------------+---------+--------+ 当我输入命令时: dff.mean(axis=1) 我有 : 0 1.074821 dtype: float64 根据熊猫的参考,axis = 1代表列,我希望命令的结果是 A 0.626386 B 1.523255 dtype: float64 所以这是我的问题:大熊猫轴是什么意思? 回答1 它指定沿着该装置计算出的轴。 默认情况下axis=0 。 这与一致numpy.mean当使用axis被明确指定(在numpy.mean ,轴线默认==无,其计算所述扁平阵列上的平均值),其中axis=0沿着行(即,索引(以熊猫为单位),并且沿列的axis=1 。 为了更加清楚起见,可以选择指定axis='index' (而不是axis=0 )或axis='columns
  • 是否有一种有效的方法来检查大型数据集的每一列中不是 NA(即 is.na()==FALSE)的 8 个连续元素?(Is there an efficient method to check for 8 successive elements that are not NA (i.e. is.na()==FALSE) in each column of a large dataset?)
    问题 我有 200 个大小为 5120*732 的数据集,并将它们保存在列表类型变量“data”中。 一些元素是不适用的。 例如,第 13 和 14 列是: ... 13 14 ... ... 13 14 ... ... NA 14 ... ... NA 14 ... ... 13 14 ... ... 13 14 ... ... 13 14 ... ... 13 14 ... ... 13 14 ... ... 13 14 ... 现在在第 12 列(即从第 13 列)之后的每一列中,一旦有 >= N1 (N1 = 8) 个不是 NA 的连续元素(即 is.na()==FALSE),我想所有这些都以“D”作为前缀。 喜欢: ... 13 D14 ... ... 13 D14 ... ... NA D14 ... ... NA D14 ... ... 13 D14 ... ... 13 D14 ... ... 13 D14 ... ... 13 D14 ... ... 13 D14 ... ... 13 D14 ... 这是我的代码: for (i in 1:length(data)) { #traverse List"data" for (j in 1:dim(data[[i]])[1]) { #traverse each row for (k in 13:dim(data[[i
  • 将我的自定义函数应用于数据框 python(Applying my custom function to a data frame python)
    问题 我有一个数据框,其中有一列名为 Signal。 我想向该数据框添加一个新列并应用我构建的自定义函数。 我对此很陌生,在将我从数据框列中取出的值传递给函数时似乎遇到了麻烦,因此对于我的语法错误或推理的任何帮助将不胜感激! Signal 3.98 3.78 -6.67 -17.6 -18.05 -14.48 -12.25 -13.9 -16.89 -13.3 -13.19 -18.63 -26.36 -26.23 -22.94 -23.23 -15.7 这是我的简单功能 def slope_test(x): if x >0 and x<20: return 'Long' elif x<0 and x>-20: return 'Short' else: return 'Flat' 我不断收到此错误:ValueError:系列的真值不明确。 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 这是我尝试过的代码: data['Position'] = data.apply(slope_test(data['Signal'])) 并且: data['Position'] = data['Signal'].apply(slope_test(data['Signal'])) 回答1 您可以将numpy.select用于矢量化解决方案:
  • python apply函数
    apply函数, 也就是应用函数, 功能非常强大; 先来解读官方文档: apply函数主要用来处理dataframe形式的数据 def apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds): """ Apply a function along an axis of the DataFrame. Parameters ---------- func : function Function to apply to each column or row. axis : {0 or 'index', 1 or 'columns'}, default 0 Axis along which the function is applied: * 0 or 'index': apply function to each column. * 1 or 'columns': apply function to each ro 官方文档很多, 但是常用的用法形式是: dataframe.apply(func,axis=0) 表示: 默认(默认axis=0)的情况下将dataframe表中的每一列的每一个元素分别作为实参传入函数func, 然后得出结果返回
  • 如何在MATLAB中将函数应用于矩阵的每一行/每一列?(How can I apply a function to every row/column of a matrix in MATLAB?)
    问题 您可以通过说例如v + 1将函数arrayfun向量中的每个项目,也可以使用函数arrayfun 。 如何在不使用for循环的情况下为矩阵的每一行/每一列执行此操作? 回答1 许多内置操作(例如sum和prod)已经可以在行或列上进行操作,因此您可以重构要利用的功能。 如果这不是一个可行的选择,那么一种方法是使用mat2cell或num2cell将行或列收集到单元格中,然后使用cellfun对所得的单元格数组进行操作。 例如,假设您要对矩阵M的列求和。 您可以简单地使用sum来做到这一点: M = magic(10); %# A 10-by-10 matrix columnSums = sum(M, 1); %# A 1-by-10 vector of sums for each column 这是使用更复杂的num2cell / cellfun选项的方法: M = magic(10); %# A 10-by-10 matrix C = num2cell(M, 1); %# Collect the columns into cells columnSums = cellfun(@sum, C); %# A 1-by-10 vector of sums for each cell 回答2 您可能需要更晦涩的Matlab函数bsxfun。 从Matlab文档中,bsxfun
  • 将 n 个函数的列表应用于数据帧的每一行?(Apply a list of n functions to each row of a dataframe?)
    问题 我有一个功能列表 funs <- list(fn1 = function(x) x^2, fn2 = function(x) x^3, fn3 = function(x) sin(x), fn4 = function(x) x+1) #in reality these are all f = splinefun() 我有一个数据框: mydata <- data.frame(x1 = c(1, 2, 3, 2), x2 = c(3, 2, 1, 0), x3 = c(1, 2, 2, 3), x4 = c(1, 2, 1, 2)) #actually a 500x15 dataframe of 500 samples from 15 parameters 对于i行中的每一行,我想在j列的每一列上评估函数j并对结果求和: unlist(funs) attach(mydata) a <- rep(NA,4) for (i in 1:4) { a[i] <- sum(fn1(x1[i]), fn2(x2[i]), fn3(x3[i]), fn4(x4[i])) } 我怎样才能有效地做到这一点? 这是实现plyr功能的合适plyr吗? 如果是这样,如何? 奖金问题:为什么a[4] NA ? 这是使用plyr函数的合适时机,如果是这样,我该怎么做? 回答1
  • 仅将 log2 转换应用于 data.frame 的数字列(Apply log2 transformation only to numeric columns of a data.frame)
    问题 我正在尝试对我的数据集运行log2转换,但我不断收到错误消息,指出“数据框中的非数字变量”。 我的数据具有row.names = 1和header = TRUE并且属于data.frame()类 我尝试添加lappy(na.strings)但这并不能解决问题 Shared_DEGs <- cbind(UT.Degs_heatmap[2:11], MT.Degs_heatmap[2:11], HT.Degs_heatmap[2:11]) Shared_DEGs1 <- `row.names<-`(Shared_DEGs, (UT.Degs_heatmap[,1])) MyData.INF.log2 <- log2(Shared_DEGs1) 数据应该被 log2 转换为输出 回答1 另一种使用base R的rapply ,请使用@r2evans 提供的数据。 rapply(mydf, f = log2, classes = c("numeric", "integer"), how = "replace") # num int chr lgl #1 1.651496 2.321928 A TRUE 回答2 我总是建议使用“tidyverse”来处理数据框。 使用install.packages('tidyverse')安装它 library(tidyverse) log2
  • 将函数应用于数据框列表中的列并附加结果(Apply function to columns in a list of data frames and append results)
    问题 我想将一个函数应用于数据框列表。 该函数从每个数据框中的两列中获取元素,将它们相加,然后将输出添加到新列中的每个数据框中。 创建虚拟数据: df.1 <- data.frame(data=cbind(rnorm(5, 0), rnorm(5, 2), rnorm(5, 5))) df.2 <- data.frame(data=cbind(rnorm(5, 0), rnorm(5, 2), rnorm(5, 5))) names(df.1) <- c("a", "b", "c") names(df.2) <- c("a", "b", "c") ls.1<- list(df.1,df.2) names(ls.1) <- c("cat", "dog") ls.1 看看数据: > ls.1 $cat a b c 1 0.7031868 1.730499 4.286386 2 0.1527551 2.794084 4.348707 3 1.1151157 0.154562 4.647605 4 0.5786497 1.407386 4.118078 5 0.9223104 2.995469 5.065981 $dog a b c 1 0.04024872 1.6760609 5.013490 2 0.18095899 2.1015250 3.452313 3 -0.86588484 2