📌  相关文章
📜  将列中的值转换为 R 中 DataFrame 的行名称

📅  最后修改于: 2022-05-13 01:55:20.486000             🧑  作者: Mango

将列中的值转换为 R 中 DataFrame 的行名称

R 中的行名默认映射到行号,从整数值 1 开始。行名可以轻松修改并重新分配给任何可能的字符串向量以分配自定义名称。由于在数据帧的每一列中行号实际上是相等的,因此列值也可以分配给 R 中的行名称。

方法 1:使用 rownames() 方法

R 中的 rownames() 方法用于为数据框分配行名称。它使用由所需名称组成的字符向量分配,其长度等于数据帧中的行数。如果它包含所有唯一值,我们可以简单地将它分配给数据帧的任何列。可以使用标准索引方法访问该列,即 df$col_name 或 df[,col_indx]。对原始数据框进行了更改。 row.names(df) 也可以用来代替 rownames() 方法。

句法:

例子:

R
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
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
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)


输出

[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

但是,如果我们在这种情况下尝试将 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

方法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)

输出

[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

方法 3:使用 row.names 作为 data.frame 创建的参数

可以使用现有数据帧创建新的数据帧,该数据帧将 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)

输出

[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