将R中的多列转换为单行

将R中的多列转换为单行,r,R,我有一个包含1000个ID及其值的数据帧。根据ID将两列转换为单行的更好方法是什么。我使用了整形包中的cast函数,但它似乎只将一列转换为行。下面是我的数据集的一个示例 DF <- data.frame(ID=c("x1","x1","x1","x1","x2","x2","x2","x2"), name1=c("T1","T1","T2","T2","T1","T1","T2","T2"), name2=c("C1","C2","C1","C2","C1","C2

我有一个包含1000个ID及其值的数据帧。根据ID将两列转换为单行的更好方法是什么。我使用了整形包中的cast函数,但它似乎只将一列转换为行。下面是我的数据集的一个示例

DF <- data.frame(ID=c("x1","x1","x1","x1","x2","x2","x2","x2"),
      name1=c("T1","T1","T2","T2","T1","T1","T2","T2"),
      name2=c("C1","C2","C1","C2","C1","C2","C1","C2"),T1_val=c(1.1,1.1,2.3,2.3,1.8,1.8,7.9,7.9),C1_val=c(1.1,2.6,1.1,2.6,1.8,3.6,1.8,3.6) )

 > DF
 ID name1 name2 T1_val C1_val
 x1    T1    C1    1.1    1.1
 x1    T1    C2    1.1    2.6
 x1    T2    C1    2.3    1.1
 x1    T2    C2    2.3    2.6                
 x2    T1    C1    1.8    1.8
 x2    T1    C2    1.8    3.6
 x2    T2    C1    7.9    1.8
 x2    T2    C2    7.9    3.6

谢谢

您可以使用dplyr和tidyr组合完成这项工作,非常简单:

library(dplyr)
library(tidyr)
DF %>%
  spread(name1, T1_val) %>%
  spread(name2, C1_val)
产生

Source: local data table [2 x 5]

  ID  T1  T2  C1  C2
1 x1 1.1 2.3 1.1 2.6
2 x2 1.8 7.9 1.8 3.6

PS:如果您想深入了解这些软件包,请查看此部分。

请参阅输出部分。我刚才给出了两个ID的示例,您希望的输出仅包含8个值,而您希望看到16个值,否?否。您将看到,对于ID“x1”,T1或T2在T1_val列或C1_val中具有相同的值,而对于ID“x2”则具有相同的值。这就是resultNice解决方案中有8个值的原因。我想不起来。您不需要
tbl\u dt(DF)
though@pfuhlert非常感谢。使用我的原始数据集,我在dim(有序)中得到以下错误。您能提供一个可复制的示例吗?然后我可以看一看。在谷歌搜索错误时,我发现:这有帮助吗?对不起,我写了一个错误的列名,这就是产生此错误的原因
Source: local data table [2 x 5]

  ID  T1  T2  C1  C2
1 x1 1.1 2.3 1.1 2.6
2 x2 1.8 7.9 1.8 3.6