gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:59:15 24 4
gpt4 key购买 nike

我的原始数据框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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com