如何将分组变量转换为R中的列?

如何将分组变量转换为R中的列?,r,R,我使用了以下数据集 data.frame(Group=c("A","A","A","B","B","B"), time= c("10:30","10:45","10:15","10:30","10:20","10:15"),

我使用了以下数据集

data.frame(Group=c("A","A","A","B","B","B"),
           time= c("10:30","10:45","10:15","10:30","10:20","10:15"),
           value= c(1,2,3,1,5,6))
我想得到下表

我尝试了整形2包中的dcast()函数,但没有弄清楚如何基于时间和值变量拆分组变量。你能帮忙吗?

试试这个:

library(dplyr)
library(tidyr)
#Code
new <- df %>%
  mutate(Val=paste0('Group',Group)) %>%
  pivot_wider(names_from = Val,values_from=Group)
输出:

# A tibble: 5 x 4
  time  value GroupA GroupB
  <chr> <dbl> <chr>  <chr> 
1 10:30     1 A      B     
2 10:45     2 A      NA    
3 10:15     3 A      NA    
4 10:20     5 NA     B     
5 10:15     6 NA     B  
# A tibble: 7 x 4
  time  value GroupA GroupB
  <chr> <dbl> <chr>  <chr> 
1 10:30     1 A      NA    
2 10:30     1 A      NA    
3 10:45     2 A      NA    
4 10:15     3 A      NA    
5 10:30     1 NA     B     
6 10:20     5 NA     B     
7 10:15     6 NA     B     
#一个tible:7 x 4
时间值组A组B
110:30 1 A NA
2 10:30 1 A NA
3 10:45 2 A NA
4 10:15 3 A NA
5:10:30 1不适用
6 10:20 5不适用
7 10:15 6不适用
库(2)
dcast(df,time+value~paste0(“组”,组),value.var=“组”)
#时间值组A组B
#1 10:15 3 A
#210:15 6 B
#3 10:20 5 B
#4 10:30 1 A B
#5 10:45 2 A

使用
重塑

reshape(
  transform(
    df,
    grpName = paste0("Group", Group)
  ),
  direction = "wide",
  idvar = c("time", "value"),
  timevar = "grpName"
)

   time value Group.GroupA Group.GroupB
1 10:30     1            A            B
2 10:45     2            A         <NA>
3 10:15     3            A         <NA>
5 10:20     5         <NA>            B
6 10:15     6         <NA>            B
time value Group.GroupA Group.GroupB
110:30 1 A B
210:45 2 A
3 10:15 3 A
5 10:20 5 B
6 10:15 6 B

是的,它正在工作。但是,在示例中,如果每个列的第一个值重复,我将在单元格中获得
list()
。如何避免它(使用某种
unique()
函数)。新的数据集是
data.frame(组=c(“A”、“A”、“A”、“A”、“B”、“B”),时间=c(“10:30”、“10:30”、“10:45”、“10:15”、“10:30”、“10:20”、“10:15”),值=c(1,1,2,3,1,5,6))
@ErkoTru让我更新一下@ErkoTru我已经更新了新的数据,请让我知道这是否有效!
reshape(
  transform(
    df,
    grpName = paste0("Group", Group)
  ),
  direction = "wide",
  idvar = c("time", "value"),
  timevar = "grpName"
)
   time value Group.GroupA Group.GroupB
1 10:30     1            A            B
2 10:45     2            A         <NA>
3 10:15     3            A         <NA>
5 10:20     5         <NA>            B
6 10:15     6         <NA>            B