在R中将具有相同变量值的行合并

4

我在R中创建了以下数据框:

V1 <- c(1,3,2,6,7,7,5,3,1,1)
V2 <- c("rot", "grün", "grün", "gelb", "blau", "rot", "grün", "blau",    
"blau", "schwarz")
V3 <- c(44,23,28,23,88,88,44,28,11,44)
as.data.frame(cbind(V1,V2,V3) )

   V1      V2 V3
1   1     rot 44
2   3    grün 23
3   2    grün 28
4   6    gelb 23
5   7    blau 88
6   7     rot 88
7   5    grün 44
8   3    blau 28
9   1    blau 11
10  1 schwarz 44

V3是我想要用来重新排列数据集的变量。 结果应该是一个数据框,其中包含每个V3值的一行,并且同一行中包含其他变量的信息。

对于这个示例,我想要的是像这样的东西:

V3  V1.1  V2.1  V2.1  V2.2  V1.3  V2.3

11  1     blau   NA    NA    NA    NA
23  3     grün    6   gelb   NA    NA
28  2     grün    3   blau   NA    NA
44  1     rot     5   grün    1   schwarz
88  7     blau    7   rot    NA    NA

有一个可以实现这个功能的函数吗?非常感谢你的帮助!!!

2
似乎只是一个数据重塑的问题,但我没有看到转换的逻辑。 - SabDeM
是的,这是一种数据重塑的方式,我想要的只是按变量V3对数据进行分组,然后将特定值的V3的V1和V2信息放在同一行中。由于V1=11只出现一次,因此该行的其余部分未定义,也可以为空而不是NA。这样解释是否更清楚了呢? - Sandy
2个回答

6
reshape(transform(df,time=ave(seq_len(nrow(df)),V3,FUN=seq_along)),dir='w',idvar='V3');
##   V3 V1.1 V2.1 V1.2 V2.2 V1.3    V2.3
## 1 44    1  rot    5 grün    1 schwarz
## 2 23    3 grün    6 gelb <NA>    <NA>
## 3 28    2 grün    3 blau <NA>    <NA>
## 5 88    7 blau    7  rot <NA>    <NA>
## 9 11    1 blau <NA> <NA> <NA>    <NA>

这正是我所需要的,谢谢! - Sandy

2

这里有一个选项,使用data.table的开发版本中的dcast

我们将data.frame转换为data.tablesetDT(df1))。 基于分组变量'V3'创建一个序列列'indx',并从'long'到'wide'进行dcast操作。 在开发版本中,dcast可以接受多个value.var列。

library(data.table)#v1.9.5+
setDT(df1)[, indx:=1:.N, V3]#create sequence variable
dcast(df1, V3~indx, value.var=c('V1', 'V2'), sep=".")
#    V3 V1.1 V1.2 V1.3 V2.1 V2.2    V2.3
#1: 11    1   NA   NA blau   NA      NA
#2: 23    3    6   NA grün gelb      NA
#3: 28    2    3   NA grün blau      NA
#4: 44    1    5    1  rot grün schwarz
#5: 88    7    7   NA blau  rot      NA

注意:安装开发版本的说明在这里

可以使用splitstackshape中的getanID更紧凑地创建序列变量。

 library(splitstackshape)
 dcast(getanID(df1, 'V3'), V3~.id, value.var=c('V1', 'V2'))
 #   V3 V1_1 V1_2 V1_3 V2_1 V2_2    V2_3
 #1: 11    1   NA   NA blau   NA      NA
 #2: 23    3    6   NA grün gelb      NA
 #3: 28    2    3   NA grün blau      NA
 #4: 44    1    5    1  rot grün schwarz
 #5: 88    7    7   NA blau  rot      NA

数据

 df1 <- data.frame(V1, V2, V3)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接