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