Изменение структуры объекта dataframe в R - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть объект данных в R , образец которого выглядит следующим образом:

4   5
4   5
4   5
4   6
4   10
4   10
4   10
4   10
4   9
4   9
4   10
4   10
4   6
4   5
12  3
12  4
12  4
12  4
13  8
13  10
13  9
13  12
13  11
13  13
13  12
13  11

На этом кадре данных я хочу создать новый кадр данных 20 столбцов (для создания тепловой карты) следующим образом:

  1. Только одна строка в новом кадре данных для каждого уникального значения в $1.Следовательно, для данных этого примера новый информационный кадр должен иметь 3 строки (уникальные 4,12,13).

  2. $2 представляет номер столбца нового информационного кадра, в котором частотазначения (новый номер столбца) должен быть заполнен.Например, для $1 значение 4 повторяется 5 раз.Следовательно, в новом кадре данных столбец 5 первой строки должен иметь значение 4.

  3. Все остальные значения столбца равны нулю.

Пример вывода для этих данных будет следующим:

0 0 0 0 4 2 0 0 2 6 0 0 0 0 0 0 0 0 0 0
0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 2 2 1 0 0 0 0 0 0 0

Как мы можем сделать это в R?Огромное спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

С помощью коллеги:

heatmap_func <-function(df){
levels<-unique(df[,1])
result<-matrix(0, length(levels), 20)
for(i in 1:nrow(result)){
occ<-as.data.frame(table(df[df[,1]==levels[i],2]),stringsAsFactors = F)
for(j in 1:nrow(occ)){
  result[i,as.numeric(occ[j,1])]<-as.numeric(occ[j,2])
}
}
return(as.data.frame(result))
}
0 голосов
/ 14 ноября 2018

Вот опция, использующая table.«Хитрость» заключается в том, чтобы преобразовать ваш второй столбец в коэффициент с соответствующими уровнями.

df1$X2 <- factor(df1$X2, levels = 1:20)
out <- as.data.frame(table(df1))

Вот способ, которым вы можете построить свой результат.

library(ggplot2)
ggplot(out, aes(X2, X1, fill = Freq)) + geom_tile() + coord_fixed()

enter image description here

данные

df1 <- structure(list(X1 = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 13L, 
13L, 13L, 13L), X2 = structure(c(5L, 5L, 5L, 6L, 10L, 10L, 10L, 
10L, 9L, 9L, 10L, 10L, 6L, 5L, 3L, 4L, 4L, 4L, 8L, 10L, 9L, 12L, 
11L, 13L, 12L, 11L), .Label = c("1", "2", "3", "4", "5", "6", 
"7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", 
"18", "19", "20"), class = "factor")), .Names = c("X1", "X2"), row.names = c(NA, 
-26L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...