前两列定义为“rownames”

j9per5c4  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(96)

我想把数据框的前两列定义为行名。实际上我想做一些计算,数据框必须是数字的。

data.frame <- data_frame(id=c("A1","B2"),name=c("julia","daniel"),BMI=c("20","49"))

BMI的值是数字的(用is.numeric证明),但是overalldata.frame不是。如何将前两列(id和name)定义为行名?提前感谢您的建议

j7dteeu8

j7dteeu81#

可以合并idname列,然后分配行名称

data.frame %>%
  tidyr::unite(rowname, id, name) %>%
  tibble::column_to_rownames()

#          BMI
#A1_julia   20
#B2_daniel  49

在base R中,您可以按照以下步骤执行相同的操作

data.frame <- as.data.frame(data.frame)
rownames(data.frame) <- paste(data.frame$id, data.frame$name, sep = "_")
data.frame[c('id', 'name')] <- NULL
thtygnil

thtygnil2#

不确定下面的代码和结果是否是你想要的:

dfout <- `rownames<-`(data.frame(BMI = as.numeric(df$BMI)),paste(df$id,df$name))

使得

> dfout
          BMI
A1 julia   20
B2 daniel  49

数据

df <- structure(list(id = structure(1:2, .Label = c("A1", "B2"), class = "factor"), 
    name = structure(2:1, .Label = c("daniel", "julia"), class = "factor"), 
    BMI = structure(1:2, .Label = c("20", "49"), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L))

相关问题