R - преобразование повторяющегося значения строки в столбец - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть такие данные:

Name     Rating
Tom      3
Tom      4
Tom      2
Johnson  5  
Johnson  7

Но мне бы хотелось, чтобы каждое уникальное имя представляло собой столбец с приведенными ниже рейтингами в каждой строке. Как я могу подойти к этому?

Ответы [ 3 ]

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

Вот хороший способ сделать это

x <- data.frame(c("Tom", "Tom", "Tom", "Johnson", "Johnson"), c(3,4,2,5,7))
colnames(x) <- c("Name", "Rating")
n <- unique(x[,1])
m <- max(table(x[,1]))
c <- data.frame(matrix(, ncol = length(n), nrow = m))
for (i in 1:length(n)) {
  l <- x[which(x[,1] == n[i]), 2]
  l2 <- rep("", m - length(l))
  c[,i] <- c(l, l2)
}
colnames(c) <- n

Результаты:

  Tom Johnson
1   3       5
2   4       7
3   2        
0 голосов
/ 07 ноября 2018

Вот способ использования пакета CRAN reshape.

library(reshape2)

d <- dcast(mydata, Rating ~ Name, value.var = "Rating")[-1]
d
#  Johnson Tom
#1      NA   2
#2      NA   3
#3      NA   4
#4       5  NA
#5       7  NA

Как видите, в этом результате слишком много значений NA. Один из способов избавиться от них может быть:

d <- lapply(d, function(x) x[!is.na(x)])
n <- max(sapply(d, length))
d <- do.call(cbind.data.frame, lapply(d, function(x) c(x, rep(NA, n - length(x)))))

d
#  Johnson Tom
#1       5   2
#2       7   3
#3      NA   4
0 голосов
/ 07 ноября 2018

Ну, это делает работу, но вводит некоторые NA. Изменить: Заменить АН с другим рейтингом.

 mydata<-data.frame(Name=c("Tom","Tom","Tom","Johnson","Johnson"),Rating=c(3,4,2,5,7))
    library(reshape2)
    library(tidyverse)



mydata1<-mydata %>% 
  mutate(Name=as.factor(Name)) %>% 
melt(id.var="Name") %>% 
  dcast(variable+value~Name) %>% 
  select(-value) %>% 
  rename(Name=variable) %>%
 select_if(is.numeric) 
mydata1 %>% 
  mutate(Johnson=as.factor(Johnson),Tom=as.factor(Tom)) %>% 
  mutate(Johnson=fct_explicit_na(Johnson,na_level = "No Rating"),
         Tom=fct_explicit_na(Tom,na_level = "No Rating"))

 Johnson       Tom
1 No Rating         2
2 No Rating         3
3 No Rating         4
4         5 No Rating
5         7 No Rating
...