首页 > 解决方案 > 如何从 data.frame 创建一个表格,其中一个单元格可以使用 R 有多个值

问题描述

我曾尝试查看备忘单并查看此处提出的其他问题,但未能找到答案。

我正在使用R和我的 data.frame 看起来像这样:

数据

我想将第二列设为垂直类别,并将第三列设为水平类别。然后,第一列将与其行中的相应类别匹配。

这是我要如何格式化表格的示例:

桌子

有没有办法编写代码来执行此操作以避免使用 Excel 和 Word 创建表格?

标签: rdataframecategories

解决方案


试试这个:

df = data.frame(let = LETTERS[1:12], 
                vert = c(10, 10, 2.5, 5, 10, 5, 2.5, 10, 1.25, 1.25, 1.25, 1.25),
                hor = c(2,2,3,2,4,2,3,4,1,4,4,1), 
                stringsAsFactors = F)


# find unique combinations
positions = expand.grid(unique(df$vert), unique(df$hor))

# pre-allocate matrix
M = matrix(ncol = length(unique(df$hor)),
       nrow = length(unique(df$vert)))

rownames(M) <- sort(unique(df$vert))
colnames(M) <- sort(unique(df$hor))

# loop over valid positions and put them in the matrix
for (i in c(1:nrow(positions))){

  # get row
  row = as.numeric(positions[i,])

  # gather all entries that go in position
  valid = df[df$vert == row[1] & df$hor == row[2], 'let']
  valid = paste(valid, collapse=",")

  # get matrix indices
  vert_i  <- which(rownames(M) == row[1])
  horiz_i <- which(colnames(M) == row[2])

  # put the data in the matrix
  M[vert_i, horiz_i] <- valid
  }

print(M)

它可能更有效,但它可以完成工作。


推荐阅读