我有一个包含三列的R数据表(实际数据集更大但是为了更好地理解而简化)
Column_One, Column_Two, Column_Three
A, 1, 4
A, 2, 3
A, 3, 77
B, 1, 44
B, 2, 32
B, 3, 770
C, 1, 43
C, 2, 310
C, 3, 68
我想从上面创建一个新矩阵(数据表),如下所示。
A, B, C
4, 44, 43
3, 32, 310
77, 770, 68
请注意,在实际数据表中,第一列和第二列有数百个不同的值。因此,需要一个通用的解决方案。
有任何问题,请告诉我。非常感谢任何建议。
可能有另一个级别,如第四列,第0列,它链接一些列列。在这种情况下,我们需要基于列零创建新数据表,然后将解决方案应用于每个子数据表的第一列。请以最快捷/最简单的方式提出建议。
Column_Zero, Column_One, Column_Two, Column_Three
XX,A, 1, 4
XX,A, 2, 3
XX,A, 3, 77
XX,B, 1, 44
XX,B, 2, 32
XX,B, 3, 770
XX,C, 1, 43
XX,C, 2, 310
XX,C, 3, 68
YY,A1, 1, 4
YY,A1, 2, 3
YY,A1, 3, 77
YY,B1, 1, 44
YY,B1, 2, 32
YY,B1, 3, 770
YY,C1, 1, 43
YY,C1, 2, 310
YY,C1, 3, 68
YY,D2, 1, 4
YY,D2, 2, 5
YY,D2, 3, 6
---------等等-----
然后我们需要创建,
------数据表一------
A, B, C
4, 44, 43
3, 32, 310
77, 770, 68
------数据表二------
A1, B1, C1, D2
4, 44, 43,4
3, 32, 310,5
77, 770, 68,6
------等等-----
相关问题:
一旦这个矩阵被拆分和重铸,了解新数据结构及其组件的维度以及如何单独访问它们变得很重要,这将在下面讨论:
答案 0 :(得分:2)
我们可以使用acast
来转换“长”字样。广泛的'格式。生成的数据集将为matrix
。
library(reshape2)
acast(df1, Column_Two~Column_One, value.var="Column_Three")
# A B C
#1 4 44 43
#2 3 32 310
#3 77 770 68
对于第二个数据集,我们可以通过" Column_Zero" split
然后循环遍历list
并像以前一样执行acast
lst <- lapply(split(df2[-1], df2$Column_Zero), function(x)
acast(x, Column_Two~Column_One,value.var="Column_Three"))
lst
#$XX
# A B C
#1 4 44 43
#2 3 32 310
#3 77 770 68
#$YY
# A1 B1 C1 D2
#1 4 44 43 4
#2 3 32 310 5
#3 77 770 68 6
答案 1 :(得分:1)
可能的tidyr / dplyr解决方案:
library(dplyr)
library(tidyr)
df %>% spread(Column_One, Column_Three) %>% select(2:4)
# A B C
#1 4 44 43
#2 3 32 310
#3 77 770 68