Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-将重复的行值重塑为列_R_Reshape_Data Science_Tidyverse - Fatal编程技术网

R-将重复的行值重塑为列

R-将重复的行值重塑为列,r,reshape,data-science,tidyverse,R,Reshape,Data Science,Tidyverse,我有这样的数据: Name Rating Tom 3 Tom 4 Tom 2 Johnson 5 Johnson 7 但我希望每个唯一的名称都是一列,每行都有下面的评级。我怎样才能做到这一点呢?好吧,这就可以了,但引入了一些NAs。 编辑:用其他额定值替换NAs mydata<-data.frame(Name=c("Tom","Tom","Tom","Johnson","Johnson"),Rating=c(3,4,2,5,7))

我有这样的数据:

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

但我希望每个唯一的名称都是一列,每行都有下面的评级。我怎样才能做到这一点呢?

好吧,这就可以了,但引入了一些NAs。 编辑:用其他额定值替换NAs

 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
mydata%
熔化(id.var=“Name”)%%>%
dcast(变量+值~名称)%%>%
选择(-value)%%>%
重命名(名称=变量)%%>%
如果(为数值型),请选择
mydata1%>%
突变(约翰逊=as.factor(约翰逊),汤姆=as.factor(汤姆))%>%
变异(Johnson=fct\u explicit\u na(Johnson,na\u level=“无评级”),
Tom=fct\u显式(Tom,na级别=“无评级”))
约翰逊·汤姆
1无评级2
2无评级3
3无评级4
4.5无评级
5.7无评级

这里有一个很好的方法

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

下面是一种使用CRAN软件包
重塑
的方法

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
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
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