R:将重复的 'row.names' 设置为数字数据帧

标签 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 157 734 ...
 $ Hora   : int  0 0 0 0 0 0 0 1 1 1 ...

最终目标是使用新的 df(仅数字值)来绘制热图,使用 Rstudio 的 d3heatmap 库(我没有找到关于这个包的任何教程,所以我'我正在尽力而为)。

因此,d3heatmap 的帮助表明第一个参数应该是“数字矩阵默认为 TRUE,除非 x 包含任何 NA。”

我已经尝试过这个:

1. diasyhoras2 <- diasyhoras[,-1] #Removes the "Dia" column and creates a new df.

2. rownames(diasyhoras2) <- diasyhoras[,1] 

但是,步骤 2 给了我这个错误,因为我的“Dia”列中确实有重复的值。

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': ‘Domingo’, ‘Jueves’, ‘Lunes’, ‘Martes’, ‘Miércoles’, ‘Sábado’, ‘Viernes’

更新 1:

这是不可能的,也没有必要。我需要做的是将数据框从“长”转换为“宽”以提供我的热图(使用reshape2)。尝试使用基础 R 来完成这项工作是一个很好的练习。感谢大家。

最佳答案

您可以使用make.names(..., unique = TRUE)来获取唯一的行名称

rownames(diasyhoras2) <- make.names(diasyhoras[,1], unique = TRUE)

这是一个简单的例子,说明名称会发生​​什么变化......

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"

不幸的是,如果您想使用日期作为数据框的行名称,则无法解决此问题。在 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" 

关于R:将重复的 'row.names' 设置为数字数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707654/

相关文章:

r - 数据表。快速计算每列内更改次数的方法

r - 检查列表的所有元素在 R 中是否相等

r - 创建一个不包含重复整数的所有九位数字的矩阵

R 计算短语中以给定字母开头的单词数

r - 创建循环以向列添加标签 : library(Hmisc)

python - 将 bupaR 的动画流程图集成到 Python 中的 Bokeh 仪表板中;有办法吗?

r - 更改整条线的厚度geom_boxplot()

r - quantmod getSymbol 的副作用是什么?

r - tidyverse 使用两种不同的 reshape 策略(创建 calcategorized 和 binary 列)执行ivot_wider

r - 如何在R中的轴文本中将句子中的某些单词变为斜体