r语言 - 如何根据两个 ID 分散数据,并用相应列的响应填充新列



这是我的数据集

ID <- c(1,1,2,2,3,3)
ID_2<-c("A","A","B","B","C","C")
Type<-c("EM","PA","EM","PA","EM","PA")
INT <- c("R", "I", "S", "S", "R", "R")
ORG <- c("EC", "EC", "KP", "KP", "MM", "MM")
Data_sum<- data.frame(ID, ID_2, Type, INT, ORG)
Data_sum

我希望数据看起来像这样。因此,行是基于";ID";以及";ID_ 2";并展开该列";类型";并用来自";INT";

ID         ID_2      EM      PA       ORG  
1          A         R       I        EC
2          B         S       S        KP
3          C         R       R        MM

这是一个tidyverse解决方案。

library(tidyr)
pivot_wider(
Data_sum,
id_cols = c(ID, ID_2, ORG),
names_from = Type,
values_from = INT
)
## A tibble: 3 x 5
#     ID ID_2  ORG   EM    PA   
#  <dbl> <chr> <chr> <chr> <chr>
#1     1 A     EC    R     I    
#2     2 B     KP    S     S    
#3     3 C     MM    R     R    

这里有一个data.table方法

library(data.table)
dcast(setDT(Data_sum), ID + ID_2 + ORG ~ Type, value.var = "INT")
#    ID ID_2 ORG EM PA
# 1:  1    A  EC  R  I
# 2:  2    B  KP  S  S
# 3:  3    C  MM  R  R

最新更新