R语言 把列中的值转换为数据框架的行名

R语言 把列中的值转换为数据框架的行名

R语言中的行名默认映射为行号,以整数值1开始。行名可以很容易地被修改,并重新分配给任何可能的字符串向量,以分配自定义的名称。由于行号在数据框架的每一列中实际上是相等的,因此列值也可以分配给R中的行名。

方法1:使用rownames()方法

R中的rownames()方法被用来为数据框架分配行名。它是用一个字符向量来分配的,该向量由所需的名字组成,其长度相当于数据框架中的行数。我们可以简单地将其分配给数据框架的任何一列,如果它包含所有唯一的值。可以使用标准的索引方法访问该列,即df$col_namedf[,col_indx]。这些变化都是对原始数据框架进行的。row.names(df)也可以用来代替rownames()方法。

语法:

rownames(df)/row.names(df) <- df$col_name

rownames(df)/row.names(df) <- df[,col_indx]

例子

data_frame <- data.frame(col1=letters[1:4],
                         col2=6,col3=c(5:8))
  
print("Original dataframe")
print(data_frame)
  
# reassigning row names
rownames(data_frame) <- data_frame$col1
print("Modified dataframe")
print(data_frame)
R

输出

[1] "Original dataframe"
 col1 col2 col3
1    a    6    5
2    b    6    6
3    c    6    7
4    d    6    8
[1] "Modified dataframe"
 col1 col2 col3
a    a    6    5
b    b    6    6
c    c    6    7
d    d    6    8
R

然而,如果我们试图在这种情况下将col2分配为数据框架的行名,R代码会抛出一个异常,因为重复的行名是不允许的,因此一个重要的条件是,列值必须是唯一的,以便将它分配给数据框架的行名。

Error in `.rowNamesDF<-`(x, value = value) :
 duplicate 'row.names' are not allowed
Calls: rownames<- ... row.names<- -> row.names<-.data.frame -> .rowNamesDF<-
In addition: Warning message:
non-unique value when setting 'row.names': 6
Execution halted
R

方法2:使用tiddle

tiddle包可以安装在工作空间中,以便对数据框架的行名进行操作。首先,这个包中的remove_rownames方法被应用在数据框架上,它删除了对现有行名的引用,然后调用column_to_rownames()方法。它的参数是列名,我们希望将其值分配给数据框架的行名。然而,这些变化必须存储在原始数据框架中,以便进一步使用。

例子

library(tidyverse)
  
data_frame <- data.frame(col1=letters[1:4],
                         col2=6,col3=c(5:8))
  
print("Original dataframe")
print(data_frame)
  
data_frame <- data_frame %>% remove_rownames %>% column_to_rownames(var="col1")
print("Modified dataframe")
print(data_frame)
R

输出

[1] "Original dataframe"
col1 col2 col3
1    a    6    5
2    b    6    6
3    c    6    7
4    d    6    8
[1] "Modified dataframe"
col1 col2 col3
a    a    6    5
b    b    6    6
c    c    6    7
d    d    6    8
R

方法3:使用row.names作为创建数据框架的参数

一个新的数据框架可以使用现有的数据框架创建,它的参数是row.names属性映射到列,其值被映射到行名。然而,这将导致从数据框架中删除该列,并且,列的数量将因此减少1。因此,这种方法可能会导致数据的不明确性。

例子

data_frame <- data.frame(col1=letters[1:4],
                         col2=6,col3=c(5:8))
print("Original dataframe")
print(data_frame)
  
# reassigning row names
data_frame <- data.frame(data_frame, row.names = 3)
print("Modified dataframe")
print(data_frame)
R

输出

[1] "Original dataframe"
 col1 col2 col3
1    a    6    5
2    b    6    6
3    c    6    7
4    d    6    8
[1] "Modified dataframe"
 col1 col2
5    a    6
6    b    6
7    c    6
8    d    6
R

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册