如何在数据框架上执行功能

时间:2019-11-27 12:55:14

标签: r loops for-loop

在论坛成员的帮助下,已创建以下代码。

foo <- function(x,y) prop.table(table(sign(x), y), 1)

现在,我不确定如何在数据框中执行此操作,其中x将从2号列到10列,而y只是数据框中的一个固定列。

非常感谢您的帮助。

最好的问候 Lutfor

2 个答案:

答案 0 :(得分:2)

您可以使用sapply遍历感兴趣的列,并针对固定列进行每次计算(即,假设固定列为列1),

sapply(df[2:10], function(i)prop.table(table(sign(i), df[,1]), 1))

答案 1 :(得分:0)

如果您喜欢使用tidyverse,也可以使用purrr的{​​{1}}函数。

说这是您的data.frame:

map

固定列为第一列library(tidyverse) df <- as_tibble(cbind(rep(1:2, 5), matrix(rnorm(10 * 9), ncol = 9)))

V1
df %>% select(2:10) %>% map(function(col) foo(col, df$V1))

您获得了$V2 y 1 2 -1 0.625 0.375 1 0.000 1.000 $V3 y 1 2 -1 0.5 0.5 1 0.5 0.5 $V4 y 1 2 -1 0.4 0.6 1 0.6 0.4 $V5 y 1 2 -1 0.6666667 0.3333333 1 0.4285714 0.5714286 $V6 y 1 2 -1 0.6 0.4 1 0.4 0.6 $V7 y 1 2 -1 0.3333333 0.6666667 1 0.5714286 0.4285714 $V8 y 1 2 -1 0.4285714 0.5714286 1 0.6666667 0.3333333 $V9 y 1 2 -1 0.5714286 0.4285714 1 0.3333333 0.6666667 $V10 y 1 2 -1 0.4 0.6 1 0.6 0.4 个列表。如果您希望像@Sotos答案中一样获得data.frame,可以执行以下操作:

table
tab_to_vec <- function(tab) c(tab[, 1], tab[, 2])

df %>% select(2:10) %>% map_dfr(function(col) tab_to_vec(foo(col, df$V1)))