R:设置重复';行名称';到数字数据帧
我的原始数据框diasyhoras有3列: a) “Dia”、“Visitas”、“Hora” 我需要取“Dia”列并将其值作为行名R:设置重复';行名称';到数字数据帧,r,R,我的原始数据框diasyhoras有3列: a) “Dia”、“Visitas”、“Hora” 我需要取“Dia”列并将其值作为行名 str(diasyhoras) 'data.frame': 175 obs. of 3 variables: $ Dia : Factor w/ 7 levels "Domingo","Jueves",..: 1 3 4 5 2 7 6 1 3 4 ... $ Visitas: num 271 493 787 853 285 712 782 16
str(diasyhoras)
'data.frame': 175 obs. of 3 variables:
$ Dia : Factor w/ 7 levels "Domingo","Jueves",..: 1 3 4 5 2 7 6 1 3 4 ...
$ Visitas: num 271 493 787 853 285 712 782 16 157 734 ...
$ Hora : int 0 0 0 0 0 0 0 1 1 1 ...
最终目标是使用Rstudio提供的d3heatmap
库,使用新的df(仅数值)绘制热图(我没有找到关于此软件包的任何教程,因此我正在尽全力)
因此,d3heatmap
的帮助说明,第一个参数应该是“除非x包含任何NAs,否则数值矩阵默认为TRUE。”
我试过这个:
1. diasyhoras2 <- diasyhoras[,-1] #Removes the "Dia" column and creates a new df.
2. rownames(diasyhoras2) <- diasyhoras[,1]
1。diasyhoras2您可以使用make.names(…,unique=TRUE)
获取唯一的行名称
rownames(diasyhoras2) <- make.names(diasyhoras[,1], unique = TRUE)
不幸的是,如果您想使用天数作为数据帧的行名称,就没有办法解决这个问题。在R中,如错误所述,数据帧中不允许重复的行名称。但是,它们在矩阵中是允许的,因此您可能希望改为使用该路径。我不熟悉d3heatmap软件包,所以我不能说如果使用矩阵,是否会得到期望的结果
x <- data.frame(a = rep(month.abb[1:2], 2))
rownames(x) <- x$a
# Error in `row.names<-.data.frame`(`*tmp*`, value = value) :
# duplicate 'row.names' are not allowed
# In addition: Warning message:
# non-unique values when setting 'row.names': ‘Feb’, ‘Jan’
m <- as.matrix(x)
rownames(m) <- x$a
m
# a
# Jan "Jan"
# Feb "Feb"
# Jan "Jan"
# Feb "Feb"
x这很接近,但是它在行名上加了一个。(n+1)。有没有办法不让行名中的(n+1)出现这种情况?那么它们就不是唯一的了。错误说明不允许重复的行名称。这是R中的一条规则。我明白了,所以不能这样做,因为行名的行为就像行的ID。谢谢@Richard Scriven
rep(month.abb[1:2], 3)
# [1] "Jan" "Feb" "Jan" "Feb" "Jan" "Feb"
make.names(rep(month.abb[1:2], 3), unique = TRUE)
# [1] "Jan" "Feb" "Jan.1" "Feb.1" "Jan.2" "Feb.2"
x <- data.frame(a = rep(month.abb[1:2], 2))
rownames(x) <- x$a
# Error in `row.names<-.data.frame`(`*tmp*`, value = value) :
# duplicate 'row.names' are not allowed
# In addition: Warning message:
# non-unique values when setting 'row.names': ‘Feb’, ‘Jan’
m <- as.matrix(x)
rownames(m) <- x$a
m
# a
# Jan "Jan"
# Feb "Feb"
# Jan "Jan"
# Feb "Feb"