在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
用于计算发生的次数。谢谢。我采纳了马库斯的建议,效果很好。我感谢你添加你的!