在R数据帧中将行值转换为列值,1表示存在,0表示不存在

在R数据帧中将行值转换为列值,1表示存在,0表示不存在,r,dataframe,R,Dataframe,我要做的是从以下格式转换数据: ID Date CODE 5567 2012-09-02 F17 5567 2012-10-15 F17 5567 2012-11-11 Z49 1245 2010-09-02 Z49 6623 2012-10-15 T65 6623 2012-11-11 Z49 ID F17 Z49 T65 5567 1 1 0 1245 0 1 0 6623 0

我要做的是从以下格式转换数据:

ID    Date          CODE
5567  2012-09-02    F17
5567  2012-10-15    F17
5567  2012-11-11    Z49
1245  2010-09-02    Z49
6623  2012-10-15    T65
6623  2012-11-11    Z49
ID    F17  Z49  T65
5567  1    1    0
1245  0    1    0
6623  0    1    1
对于此格式:

ID    Date          CODE
5567  2012-09-02    F17
5567  2012-10-15    F17
5567  2012-11-11    Z49
1245  2010-09-02    Z49
6623  2012-10-15    T65
6623  2012-11-11    Z49
ID    F17  Z49  T65
5567  1    1    0
1245  0    1    0
6623  0    1    1

请注意,我不关心“日期”,也不关心特定代码与ID关联的次数。我只关心某个ID是否与代码关联1次或多次。i、 e.1=是,0=否。

您可以从
数据中使用
dcast
。表
如下:

dcast(dt, ID ~ CODE, fun.aggregate = function(x) 1L, fill = 0L)
     ID F17 T65 Z49
1: 1245   0   0   1
2: 5567   1   0   1
3: 6623   0   1   1
数据

library(data.table)
dt <- fread("ID    Date          CODE
5567  2012-09-02    F17
5567  2012-10-15    F17
5567  2012-11-11    Z49
1245  2010-09-02    Z49
6623  2012-10-15    T65
6623  2012-11-11    Z49")
库(data.table)

dt也许你可以试试下面以R为底的
表格

+(table(df1[-2])>0)

      CODE
ID     F17 T65 Z49
  1245   0   0   1
  5567   1   0   1
  6623   0   1   1

我们可以从
tidyverse

library(dplyr)
library(tidyr)
df1 %>%
   distinct(ID, CODE) %>% 
   pivot_wider(names_from = CODE, values_from = CODE,
       values_fn = list(CODE = length), values_fill = list(CODE = 0))
# A tibble: 3 x 4
#     ID   F17   Z49   T65
#  <int> <int> <int> <int>
#1  5567     1     1     0
#2  1245     0     1     0
#3  6623     0     1     1
库(dplyr)
图书馆(tidyr)
df1%>%
不同的(ID,代码)%%>%
枢轴(名称从=代码,值从=代码,
值\ fn=列表(代码=长度),值\填充=列表(代码=0))
#一个tibble:3x4
#ID F17 Z49 T65
#     
#1  5567     1     1     0
#2  1245     0     1     0
#3  6623     0     1     1
数据
df1对不起,“+”和值-2,0指的是什么?列?@Melderon
+
将逻辑值转换为数字,
-2
表示我们从数据帧
df1
中排除第二列,
0
用于计算发生的次数。谢谢。我采纳了马库斯的建议,效果很好。我感谢你添加你的!