在R中将数据从短格式重新排列为长格式

在R中将数据从短格式重新排列为长格式,r,R,我有以下方式的数据: level1 level2 level3 level4 controls x_11 x_12 x_13 x_14 cases x_21 x_22 x_23 x_24 什么是最好的方式把这个长的形式?具体地说,我希望x_11行位于级别0,然后是一个0的指示符,x_12行位于级别指示符0 我正试图将其放入coin库中的independence\u test函数中,这就是它所需要的数据。谢谢大家! 编辑 我有

我有以下方式的数据:

         level1  level2  level3  level4
controls  x_11    x_12    x_13    x_14
cases     x_21    x_22    x_23    x_24
什么是最好的方式把这个长的形式?具体地说,我希望x_11行位于级别0,然后是一个0的指示符,x_12行位于级别指示符0

我正试图将其放入
coin
库中的
independence\u test
函数中,这就是它所需要的数据。谢谢大家!

编辑

我有一个矩阵:

         1 2 3 4
controls 9 7 7 7
cases    0 1 1 5
如何得到一个37x2的矩阵。每行将有“状态”和“bin”。例如,我会得到9行

0,1(控件,bin=1)

然后是7行: 0,2(控制,箱=2)

0行,其中包括: 0,1(箱,箱=1)

1,2(箱,箱=2)

谢谢大家!

编辑2 Dput输入/输出到以下一个解决方案:

> dput(mtx)
structure(c(9L, 0L, 7L, 1L, 7L, 1L, 7L, 5L), .Dim = c(2L, 4L), .Dimnames = list(
    c("controls", "cases"), c("1", "2", "3", "4")))
dput(长) 结构(c)(“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“3”), "3", "3", "3", "3", "3", "3", "4", "1", "1", "1", "1", "1", "1", "1", "2", "3", "3", "3", "3", "3", "3", "3", "4", "4", "4", "4", “4”、“控制”、“控制”、“控制”、“控制”、“控制”、“控制”, “控制”、“控制”、“控制”、“控制”、“控制”、“控制”、“控制”, “控制”、“控制”、“控制”、“控制”、“控制”、“控制”、“案例”, “控制”、“控制”、“控制”、“控制”、“控制”、“控制”、“控制”, “控制”、“案例”、“控制”、“控制”、“控制”、“控制”、“控制”, “控制”、“控制”、“控制”、“案例”、“案例”、“案例”, “cases”,“cases”),.Dim=c(37L,2L),.Dimnames=list(NULL, (""状态"))


as.data.frame.table
函数和
rep
函数一起可以执行您想要的操作:

> m <- matrix(1:12, 4)
> df <- as.data.frame.table(m)
> df[ rep(1:nrow(df), df$Freq), ]
      Var1 Var2 Freq
1        A    A    1
2        B    A    2
2.1      B    A    2
3        C    A    3
3.1      C    A    3
3.2      C    A    3
4        D    A    4
4.1      D    A    4
4.2      D    A    4
4.3      D    A    4
5        A    B    5
5.1      A    B    5
.
.
.
>m df df[rep(1:nrow(df),df$Freq),]
Var1 Var2频率
1 A 1
2 B A 2
2.1 B A 2
3 C A 3
3.1 C A 3
3.2 C A 3
4 D A 4
4.1 D A 4
4.2 D A 4
4.3 D A 4
5 A B 5
5.1 A B 5
.
.
.

另一种选择是查看重塑2或plyr软件包。

as.data.frame.table函数和
rep
函数一起可以完成您想要的功能:

> m <- matrix(1:12, 4)
> df <- as.data.frame.table(m)
> df[ rep(1:nrow(df), df$Freq), ]
      Var1 Var2 Freq
1        A    A    1
2        B    A    2
2.1      B    A    2
3        C    A    3
3.1      C    A    3
3.2      C    A    3
4        D    A    4
4.1      D    A    4
4.2      D    A    4
4.3      D    A    4
5        A    B    5
5.1      A    B    5
.
.
.
>m df df[rep(1:nrow(df),df$Freq),]
Var1 Var2频率
1 A 1
2 B A 2
2.1 B A 2
3 C A 3
3.1 C A 3
3.2 C A 3
4 D A 4
4.1 D A 4
4.2 D A 4
4.3 D A 4
5 A B 5
5.1 A B 5
.
.
.

另一种选择可能是查看重塑2或plyr软件包。

如果您想将数据从宽更改为长,则
melt
功能非常有用。我试图创建一个玩具数据集,这样你的问题就可以得到回答,尽管它可能不是你想要的(如果没有一个具体的、可复制的示例数据集,很难“猜测”某人想要做什么)

首先,我们将在R中创建玩具数据集:

df.wide <- as.data.frame(matrix(1:8,2))
colnames(df.wide) <- c("Level 1", "Level 2", "Level 3", "Level 4")
rownames(df.wide) <- c("Controls", "Cases")

# creating an id variable for the rows
df.wide$id <- rownames(df.wide)

# examining the dataframe
print(df.wide)
Level 1 Level 2 Level 3 Level 4       id
Controls       1       3       5       7 Controls
Cases          2       4       6       8    Cases

df.wide如果要将数据从宽更改为长,则
melt
功能非常有用。我试图创建一个玩具数据集,这样你的问题就可以得到回答,尽管它可能不是你想要的(如果没有一个具体的、可复制的示例数据集,很难“猜测”某人想要做什么)

首先,我们将在R中创建玩具数据集:

df.wide <- as.data.frame(matrix(1:8,2))
colnames(df.wide) <- c("Level 1", "Level 2", "Level 3", "Level 4")
rownames(df.wide) <- c("Controls", "Cases")

# creating an id variable for the rows
df.wide$id <- rownames(df.wide)

# examining the dataframe
print(df.wide)
Level 1 Level 2 Level 3 Level 4       id
Controls       1       3       5       7 Controls
Cases          2       4       6       8    Cases

df.wide假设列联矩阵称为mtx:

     cbind( bin=unlist(mapply( rep, times=mtx, rownames(mtx)[row(mtx)] )), 
            status=unlist(mapply( rep, times=mtx, colnames(mtx)[col(mtx)] ))
          )
  #--------------------------
      bin        status
 [1,] "controls" "1"   
 [2,] "controls" "1"   
 [3,] "controls" "1"   
 [4,] "controls" "1"   
 [5,] "controls" "1"   
 [6,] "controls" "1"   
 [7,] "controls" "1"   
 [8,] "controls" "1"   
 [9,] "controls" "1"   
[10,] "controls" "2"   
[11,] "controls" "2"   
[12,] "controls" "2"   
[13,] "controls" "2"   
[14,] "controls" "2"   
[15,] "controls" "2"   
[16,] "controls" "2"   
[17,] "cases"    "2"   
[18,] "controls" "3"   
[19,] "controls" "3"   
[20,] "controls" "3"   
[21,] "controls" "3"   
[22,] "controls" "3"   
[23,] "controls" "3"   
[24,] "controls" "3"   
[25,] "cases"    "3"   
[26,] "controls" "4"   
[27,] "controls" "4"   
[28,] "controls" "4"   
[29,] "controls" "4"   
[30,] "controls" "4"   
[31,] "controls" "4"   
[32,] "controls" "4"   
[33,] "cases"    "4"   
[34,] "cases"    "4"   
[35,] "cases"    "4"   
[36,] "cases"    "4"   
[37,] "cases"    "4"   
要了解其工作原理,您可以使用这样的矩阵:

dput(mtx)
structure(c(9, 0, 7, 1, 7, 1, 7, 5), .Dim = c(2L, 4L), .Dimnames = list(
    c("controls", "cases"), c("1", "2", "3", "4")))

假设列联矩阵称为mtx:

     cbind( bin=unlist(mapply( rep, times=mtx, rownames(mtx)[row(mtx)] )), 
            status=unlist(mapply( rep, times=mtx, colnames(mtx)[col(mtx)] ))
          )
  #--------------------------
      bin        status
 [1,] "controls" "1"   
 [2,] "controls" "1"   
 [3,] "controls" "1"   
 [4,] "controls" "1"   
 [5,] "controls" "1"   
 [6,] "controls" "1"   
 [7,] "controls" "1"   
 [8,] "controls" "1"   
 [9,] "controls" "1"   
[10,] "controls" "2"   
[11,] "controls" "2"   
[12,] "controls" "2"   
[13,] "controls" "2"   
[14,] "controls" "2"   
[15,] "controls" "2"   
[16,] "controls" "2"   
[17,] "cases"    "2"   
[18,] "controls" "3"   
[19,] "controls" "3"   
[20,] "controls" "3"   
[21,] "controls" "3"   
[22,] "controls" "3"   
[23,] "controls" "3"   
[24,] "controls" "3"   
[25,] "cases"    "3"   
[26,] "controls" "4"   
[27,] "controls" "4"   
[28,] "controls" "4"   
[29,] "controls" "4"   
[30,] "controls" "4"   
[31,] "controls" "4"   
[32,] "controls" "4"   
[33,] "cases"    "4"   
[34,] "cases"    "4"   
[35,] "cases"    "4"   
[36,] "cases"    "4"   
[37,] "cases"    "4"   
要了解其工作原理,您可以使用这样的矩阵:

dput(mtx)
structure(c(9, 0, 7, 1, 7, 1, 7, 5), .Dim = c(2L, 4L), .Dimnames = list(
    c("controls", "cases"), c("1", "2", "3", "4")))

对不起,我需要一些稍微不同的东西。我做了编辑,有更多的细节。你能看一下吗?对不起,我需要一些稍微不同的东西。我做了编辑,有更多的细节。你能看一下吗?这个不行。矩阵不正确。例如,我在Bin4中没有得到带有“控件”的行。我只是再次运行它,它“工作”很好。如果您想要替代解决方案(替代问题),您需要在对象上发布
dput()
。我已经添加了dput输入和输出。对于你的矩阵,我没有看到“控件,4”的元素。我现在明白了。列名混淆了。应该和编辑一起工作。@Boddedust,很抱歉,但我仍然认为它不工作。修改后的代码没有显示“2”个“案例”的行。这不起作用。矩阵不正确。例如,我在Bin4中没有得到带有“控件”的行。我只是再次运行它,它“工作”很好。如果您想要替代解决方案(替代问题),您需要在对象上发布
dput()
。我已经添加了dput输入和输出。对于你的矩阵,我没有看到“控件,4”的元素。我现在明白了。列名混淆了。应该和编辑一起工作。@Boddedust,很抱歉,但我仍然认为它不工作。修改后的代码没有显示“2”个案例的行