Как я могу изменить data.table или data.farme в R, не суммируя частоты?
Я пытаюсь изменить следующую таблицу data.table, чтобы она соответствовала таблице сопряженности (не совсем потому, что я не хочу получать частоту в качестве значения, я просто хочу 0 или 1):
ДФ:
ID CC
990081899A CC2
990081899A CC115
990081899A CC39
990081899A CC39
990081899A CC115
990002362D CC2
990002362D CC115
990002362D CC115
990002362D CC115
990002362D CC6
990042716D CC2
Я попробовал 2 вещи следующим образом, но получил тот же результат:
Первый:
Contingency<-with(Df, table(ID,CC))
Diag6<- cbind(ID = rownames(Contingency), apply(Contingency, 2 , as.character))
Во-вторых:
Я добавил столбец значений в данные, такие как Value = 1: Df:
ID CC Value
990081899A CC2 1
990081899A CC115 1
990081899A CC39 1
990081899A CC39 1
990081899A CC115 1
990002362D CC2 1
990002362D CC115 1
990002362D CC115 1
990002362D CC115 1
990002362D CC6 1
990042716D CC2 1
и попробовал:
Df<- data.table(dcast(Df,ID~CC,value.var="Value"),key="ID")
Оба результата одинаковы:
ID CC115 CC2 CC39 CC6
990081899A 2 1 2 0
990002362D 3 1 0 1
Здесь я не хочу частоту, я просто хочу, если она присутствует, значение должно быть равно 1, иначе 0:
ID CC115 CC2 CC39 CC6
990081899A 1 1 1 0
990002362D 1 1 0 1
Любые предложения высоко ценятся.
3 ответа
Просто используя table(DF)
даст вам ваш макет.
Затем вы можете преобразовать все положительные значения в 1
с помощью sign
sign(table(DF))
CC
ID CC115 CC2 CC39 CC6
990002362D 1 1 0 1
990042716D 0 1 0 0
990081899A 1 1 1 0
Я уверен, что на это уже отвечали где-то раньше, но table
должен быть в состоянии сделать это:
with(unique(dat), table(ID,CC) )
# CC
#ID CC115 CC2 CC39 CC6
# 990002362D 1 1 0 1
# 990042716D 0 1 0 0
# 990081899A 1 1 1 0
Вы можете обернуть выше, как:
as.data.frame.matrix(with(unique(dat), table(ID,CC) ))
... если вы предпочитаете этот вывод.
# CC115 CC2 CC39 CC6
#990002362D 1 1 0 1
#990042716D 0 1 0 0
#990081899A 1 1 1 0
Вы можете сделать это (с или без data.table
), передав свою собственную функцию dcast
dcast(DF, ID~CC, fun = function(x) as.integer(length(x)>0))
# Using CC as value column: use value.var to override.
# ID CC115 CC2 CC39 CC6
# 1 990002362D 1 1 0 1
# 2 990042716D 0 1 0 0
# 3 990081899A 1 1 1 0
Или передавая уменьшенный data.frame, содержащий уникальные комбинации
dcast(unique(DF), ID~CC,fun=length,value.var = 'CC')