将列中的值转换为现有数据框中的行名
Posted
技术标签:
【中文标题】将列中的值转换为现有数据框中的行名【英文标题】:Convert the values in a column into row names in an existing data frame 【发布时间】:2011-07-30 03:36:29 【问题描述】:我想将现有数据框的列中的值转换为行名。是否可以在不导出数据框的情况下执行此操作,然后使用 row.names =
调用重新导入它?
例如我想转换:
> samp
names Var.1 Var.2 Var.3
1 A 1 5 0
2 B 2 4 1
3 C 3 3 2
4 D 4 2 3
5 E 5 1 4
进入:
> samp.with.rownames
Var.1 Var.2 Var.3
A 1 5 0
B 2 4 1
C 3 3 2
D 4 2 3
E 5 1 4
【问题讨论】:
【参考方案1】:应该这样做:
samp2 <- samp[,-1]
rownames(samp2) <- samp[,1]
简而言之,除了重新分配,别无选择。
编辑:纠正自己,也可以原地做:分配rowname属性,然后删除列:
R> df<-data.frame(a=letters[1:10], b=1:10, c=LETTERS[1:10])
R> rownames(df) <- df[,1]
R> df[,1] <- NULL
R> df
b c
a 1 A
b 2 B
c 3 C
d 4 D
e 5 E
f 6 F
g 7 G
h 8 H
i 9 I
j 10 J
R>
【讨论】:
> rownames(df)row.names<-.data.frame(*tmp*
, value = value) 中的错误:'row.names' 长度无效另外:警告消息:设置行不推荐使用 tibble 上的名称。【参考方案2】:
从 2016 年起,您还可以使用 tidyverse
。
library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")
【讨论】:
更具体地说是tibble::column_to_rownames
我收到警告“不推荐在小标题上设置行名称”
tibble 可视化不显示行名,但是,要查看它,您需要将其传送到 as.data.frame() samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
看起来最新版的包会自动处理tibble到data.frame的转换。【参考方案3】:
一行
> samp.with.rownames <- data.frame(samp[,-1], row.names=samp[,1])
【讨论】:
【参考方案4】:您可以通过 2 个简单的语句执行此操作:
row.names(samp) <- samp$names
samp[1] <- NULL
【讨论】:
适用于 R 3.5.3【参考方案5】:看起来单行变得更加简单(目前使用 R 3.5.3):
# generate original data.frame
df <- data.frame(a = letters[1:10], b = 1:10, c = LETTERS[1:10])
# use first column for row names
df <- data.frame(df, row.names = 1)
用于行名的列被自动删除。
【讨论】:
整洁!我直接去找 tidyverse 解决方案,没有检查 base R 是否有一个方便的方法来处理这个问题。我应该从基地开始。以上是关于将列中的值转换为现有数据框中的行名的主要内容,如果未能解决你的问题,请参考以下文章