在R中对数据框的每一行应用一个函数

29
我想对数据框中的每一行应用一个函数,然而默认情况下R会将其应用到每一列。我该如何强制它应用到每一行?
可能重复:如何在R中对矩阵(或数据框)的每一行应用函数
R - 如何在每个数据框行上调用类似于apply的函数,并从每个数据框行中传递多个参数
> 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

1
我看到lapply文档说它返回一个列表,而sapply文档说它是一个用户友好版本,返回适当类型的对象。 - highBandWidth
3
lapply()sapply()作用于向量的组件。该向量可以是原子向量(例如1:10),也可以是列表。对于列表,它会将函数应用于列表的每个组件。数据框是列表的一种特殊情况,其中“列”是组件,因此lapply()sapply()适用于数据框的“列”。 - Gavin Simpson
2
它并没有这么说,它说:"sapply是lapply的用户友好版本,默认情况下返回适当的向量或矩阵。" - Joshua Ulrich
1个回答

40
你需要使用 apply 函数(请参阅相关文档)。使用 apply(var,1,fun) 将应用于行,apply(var,2,fun) 将应用于列。
> apply(a,1,min)
[1] 1 0 3

如果我想要给定列的最小值怎么办?比如说第二列。 - Selvam
1
@Selvam,min(a[,2])--但你可能应该阅读一些R的入门材料(例如http://cran.r-project.org/doc/manuals/R-intro.html#Array-indexing)--这是一个非常基本的问题。 - Ben Bolker
26
这并没有完全回答原始的问题。apply()函数会尝试将数据框转换为矩阵(请参见帮助文档)。如果由于混合的数据类型而无法顺利转换,我不太确定会发生什么结果。 - Shea Parkes
@SheaParkes 如果函数中不需要字符串,只需执行apply(a[NumericColNames],1,min)。 - jeb
2
@SheaParkes 我相信它会将所有数据类型转换为“最低公共分母”,通常最终只会变成字符。 - antoine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接