与R相同的因子的分数

与R相同的因子的分数,r,dataframe,apply,R,Dataframe,Apply,我正在处理一个棘手的问题。假设我有以下数据: df <- data.frame(matrix(ncol = 0, nrow = 7)) df$x <- factor(c("blue","blue","red","red","green","green","black")) df$y <- factor(c("A","B","A","C","B","C","A")) df$z <- c(1998, 1998, 1998, 1998, 1999, 2000, 2001) 或

我正在处理一个棘手的问题。假设我有以下数据:

df <- data.frame(matrix(ncol = 0, nrow = 7))
df$x <- factor(c("blue","blue","red","red","green","green","black"))
df$y <- factor(c("A","B","A","C","B","C","A"))
df$z <- c(1998, 1998, 1998, 1998, 1999, 2000, 2001)
crossprod(表(df$x,df$y))

为了回答我自己问题的其余部分,我可以通过以下方式获得我想要的比例:

x <- t(table(df[,1:2])) %*% table(df[,1:2])

x / diag(x)

x我喜欢用线性代数来做某事

t(table(df[,1:2])) %*% table(df[,1:2])
   y
y   A B C
  A 3 1 1
  B 1 2 1
  C 1 1 2
编辑:正如@thelatemail所指出的,还有一个内置(可能更快)功能:

crossprod(table(df$x, df$y))

    A B C
  A 3 1 1
  B 1 2 1
  C 1 1 2

备选方案-
crossprod(表(df$x,df$y))
是的,但它只是一个函数。我们只是将矩阵相乘!;)别开玩笑了,这也是一个好方法。我有一个隐秘的怀疑,
crossprod
可能只是扩展到了
%*%
无论如何。
crossprod
文档确实说它“通常比直接乘法稍微快一点”,所以至少还有一些额外的东西。太棒了!我真的想得太多了。
t(table(df[,1:2])) %*% table(df[,1:2])
   y
y   A B C
  A 3 1 1
  B 1 2 1
  C 1 1 2
crossprod(table(df$x, df$y))

    A B C
  A 3 1 1
  B 1 2 1
  C 1 1 2