【问题标题】:Apply a function to each row in a data frame in R [duplicate]将函数应用于R中数据框中的每一行[重复]
【发布时间】:2011-07-16 20:29:12
【问题描述】:

可能重复:
how to apply a function to every row of a matrix (or a data frame) in R

R - how to call apply-like function on each row of dataframe with multiple arguments from each row of the df

我想对数据框中的每一行应用一个函数,但是,R 默认将它应用到每一列。否则我该如何强制?

> a = as.data.frame(list(c(1,2,3),c(10,0,6)),header=T)
> a
  c.1..2..3. c.10..0..6.
1          1          10
2          2           0
3          3           6
> sapply(a,min)
 c.1..2..3. c.10..0..6. 
          1           0 

我想要类似的东西

1   2
2   0
3   3

【问题讨论】:

  • 我看到 lapply doc 说它返回一个列表,sapply doc 说它是一个用户友好的版本,它返回一个适当类型的对象。
  • lapply()sapply() 对向量的组件进行操作。该向量可以是原子向量(例如1:10)或列表。对于列表,它将函数应用于列表的每个组件。数据框是列表的一种特殊情况,其中“列”是组件,因此lapply()sapply() 处理数据框的“列”。
  • 它没有这么说;它说,“sapply 是 lapply 的用户友好版本,如果合适,默认返回一个向量或矩阵。”

标签: r dataframe sapply


【解决方案1】:

您想要apply(请参阅文档)。 apply(var,1,fun) 将应用于行,apply(var,2,fun) 将应用于列。

> apply(a,1,min)
[1] 1 0 3

【讨论】:

  • 如果我想要给定列的最小值怎么办?说第 2 列。
  • @Selvam, min(a[,2]) -- 但您可能应该通读一些 R 介绍材料(例如 cran.r-project.org/doc/manuals/R-intro.html#Array-indexing ) -- 这是一个非常基本的问题。
  • 这并不能完全回答原始问题。 apply() 将尝试将 data.frame 转换为矩阵(请参阅帮助文档)。如果由于混合数据类型而不能正常转换,我不太确定会产生什么结果。
  • @SheaParkes 如果您不需要函数中的字符串,只需执行 apply(a[NumericColNames],1,min)。
  • @SheaParkes 我相信它会将所有数据类型转换为“最小公分母”,通常最终只是简单的字符。
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 2023-03-17
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
相关资源
最近更新 更多