【发布时间】:2019-03-13 23:11:23
【问题描述】:
我想使用一个函数将数据框的第一列设置为行名。我试图在函数中包含 column_to_rownames() 。这是我最初的尝试(在咨询this article 之后)。
df <- tibble(a = c("a","a","a","b","b"), b= sample(1:10, 5))
col_to_row <- function(df, grp_var){
require(dplyr)
grp_var <- enquo(grp_var)
df %>% column_to_rownames(var = quo_expr(grp_var))
}
col_to_row(df, a)
这给出了错误:
Error in match(x, table, nomatch = 0L) : 'match' requires vector arguments
我尝试将 quo_expr(grp_var) 换成 !!grp_var:
col_to_row <- function(df, grp_var){
require(dplyr)
grp_var <- enquo(grp_var)
df %>% column_to_rownames(var = !!grp_var)
}
这给出了错误:
Error in is_quosure(e2) : argument "e2" is missing, with no default
我尝试了一个基于 R 的解决方案:
col_to_row_base <- function(df, grp_var){
df2 <- df[,-1]
print(df2) # for debugging
print(df[,1]) # for debugging
row.names(df2) <- df[,1]
}
这给出了错误:
Error in `.rowNamesDF<-`(x, value = value) : invalid 'row.names' length
关于如何使用函数将数据框的第一列设置为行名有什么想法吗?
这是我在这里的第一篇文章,所以如果这不符合标准,请告诉我。
运行 R 版本 3.5.2,平台:x86_64-pc-linux-gnu(64 位),Linux Mint 19,dplyr_0.8.0.1
【问题讨论】:
-
基本情况不起作用,因为如果您有两列 data.frame
df2 <- df[,-1]使df2成为向量,如果您将其更改为df2 <- df[,-1, drop = FALSE]它应该可以工作。