在R中重新排列表格

时间:2018-10-12 17:22:20

标签: r

我想知道是否有人可以帮我取下以以下方式设置的桌子:

Date   x    y    z  
5-3    12   43  23  
5-1    41   75  32  
9-5    21   43  60  

并使用以下格式创建新表:

Number  Letter  
  12       x  
  43       y  
  23       z  
  41       x  
  75       y  
 ...      ...  

行不必以任何特定的方式排序,我只需要一列中的所有数字值,以及第二列中与它们相关联的列字母(在原始表中)。谢谢!

2 个答案:

答案 0 :(得分:1)

由于我无法在@Frank的答案中添加评论,因此我将发布自己的评论。这在R底下有效。

这与取消枢纽-插入表格基本相同。

使用@Frank的数据帧DF

DF_new=stack(subset(DF, select = -Date))
names(DF_new) <- c("Number", "Letter")

或单线:

DF_new=setNames(stack(subset(DF, select = -Date)),  c("Number", "Letter"))

两者均给出结果:

  Number Letter
1     12      x
2     41      x
3     21      x
4     43      y
5     75      y
6     43      y
7     23      z
8     32      z
9     60      z

答案 1 :(得分:0)

您可以使用reshape2软件包:

> reshape2::melt(t(DF[, -1]), 
    varnames=c("Letter", "row"), 
    value.name = "Number")
  Letter row Number
1      x   1     12
2      y   1     43
3      z   1     23
4      x   2     41
5      y   2     75
6      z   2     32
7      x   3     21
8      y   3     43
9      z   3     60

数据:

DF = structure(list(Date = c("5-3", "5-1", "9-5"), x = c(12L, 41L, 
21L), y = c(43L, 75L, 43L), z = c(23L, 32L, 60L)), .Names = c("Date", 
"x", "y", "z"), row.names = c(NA, -3L), class = "data.frame")