【问题标题】:How to make a matrix out of pairwise comparisons in R?如何根据R中的成对比较制作矩阵?
【发布时间】:2020-01-07 16:15:21
【问题描述】:

我有一个非常简单的问题,但我不知道如何格式化应该用于形成成对矩阵的数据。我尝试的每种类型的数据形成都没有结果。我有一个 csv 文件,其中包含个人之间的比较列表,并希望使用 R 将其转换为矩阵。这些列是下面示例的扩展。

   id1         id2        r-values

   Amy         Katie        0.5

column <-read.table("list-r-values.csv", header = TRUE, sep = ",", check.names = FALSE)


sample1<- column$id1
sample2<- column$id2
rvalues<- column$`r-values`
d <- as.data.frame(cbind(sample1, sample2, rvalues))
str(d)

b<-data.matrix(d, rownames.force = NA)

我也尝试了其他几个代码,我只是好奇将 csv 文件放入数据框是否是合适的第一步?

我不知道如何从列表和列中获取输出并使其成为成对矩阵

【问题讨论】:

  • read.table 返回一个数据框。我认为您在接下来的 4 行代码中真正要做的就是复制数据并更改列名。你可以改用names(column) &lt;- c("sample1", "sample2", "rvalues")

标签: r matrix


【解决方案1】:

在基础 R 中使用 xtabs() 函数的解决方案。

# generate random data
set.seed(314)
df <- data.frame(id1 = sample(letters, size=5, replace=T))
df$id2 <- sample(letters, size=5, replace=T)
df$r.values <- runif(n=5)

# function to return pairwise matrix
xtabs(r.values ~ id1 + id2, data=df)

   id2
id1          b          f          l          m          v
  c 0.00000000 0.00000000 0.00000000 0.51988234 0.39122631
  g 0.00000000 0.03852331 0.00000000 0.00000000 0.00000000
  n 0.50505545 0.00000000 0.00000000 0.00000000 0.00000000
  t 0.00000000 0.00000000 0.72206577 0.00000000 0.00000000

【讨论】:

  • 非常感谢您的帮助。您是否还可以提供,一旦您有了这个矩阵,或者如果您从一个矩阵开始,我如何将它转换回成对比较列表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2012-09-22
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多