在论坛成员的帮助下,已创建以下代码。
foo <- function(x,y) prop.table(table(sign(x), y), 1)
现在,我不确定如何在数据框中执行此操作,其中x将从2号列到10列,而y只是数据框中的一个固定列。
非常感谢您的帮助。
最好的问候 Lutfor答案 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)))