当前位置: 首页 > 知识库问答 >
问题:

在dplyr中添加_行名的相反函数

张和豫
2023-03-14

作为中间步骤,我生成一个数据帧,其中一列作为字符串,其余的是数字。我想将其转换为矩阵,但首先我必须将该字符列转换为行名称,并将其从数据帧中删除。

dplyr中是否有一种简单的方法可以做到这一点?类似于to_rownames()的函数,与add_rownames()相反?

我看到了一个使用自定义函数的解决方案,但它确实脱离了dplyr的哲学。

共有3个答案

廖绍辉
2023-03-14

如果你真的需要一个矩阵,你可以把字符列保存到一个单独的变量中,删除它,然后创建矩阵

library(dplyr)

df <- data_frame(a = sample(letters, 4), b = c(1:4), c = c(5:8))

letters <- df %>% select(a)
a.matrix <- df %>% select(-a) %>% as.matrix

我不知道在那之后你会做什么,但这会让你达到你要求的程度。。。

居星阑
2023-03-14

这提供了NSE

library(dplyr)

df <- data_frame(a=sample(letters, 4), b=c(1:4), c=c(5:8))

reset_rownames <- function(df, col="rowname") {
  stopifnot(is.data.frame(df))
  col <- as.character(substitute(col))
  reset_rownames_(df, col)
}

reset_rownames_ <- function(df, col="rowname") {
  stopifnot(is.data.frame(df))
  nm <- data.frame(df)[, col]
  df <- df[, !(colnames(df) %in% col)]
  rownames(df) <- nm
  df
}

m <- "rowname"

head(as.matrix(reset_rownames(add_rownames(mtcars), "rowname")))
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

head(as.matrix(reset_rownames_(add_rownames(mtcars), m)))
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

也许到_rownames()设置_rownames()更有意义<代码>“”\_(ツ)_/'YMMV。

厉文栋
2023-03-14

您现在可以使用tibble包:

tibble::column_to_rownames()
 类似资料:
  • 我试过了 但这行不通。在我最初的方法中,我通过将每周编号1-4的dataframe与我的rawdata文件合并来解决这个问题。这样,我每篇文章有4周的时间(行),但是使用for循环的实现效率非常低,所以我试图用dplyr(或任何其他更高效的包/函数)做同样的事情。任何建议都将不胜感激!

  • 当相应的列>0时,我需要将一些数据列设置为NA。 我也在考虑重塑,这样我就可以做一个变异。这里最好的做法是什么?

  • 我有一个数据帧,其中包含在不同时间点测量的几个变量(例如,< code>test1_tp1,< code>test1_tp2,< code>test1_tp3,< code>test2_tp1,< code>test2_tp2,...). 我现在尝试使用将新列添加到数据帧中,该数据帧计算这些列的选择上的行平均值(例如,)的所有时间点上的平均值)。 < li >我甚至对计算显式命名的列的平均值的语法

  • 我试图计算在一个Tibble中源向量和比较向量之间的Jaccard相似度。 jaccard_sim中的所有值都为零。但是,如果我们运行类似这样的东西,我们得到第一个条目的正确的Jaccard相似度为0.2:

  • 我正在Jersey上构建REST服务,并使用Jackson从我模型的java类生成JSON。模型具有绝对简单的值,我认为这是最典型的情况。但我得到了奇怪的结果: 我的期待结果: 我的字段源值不包含任何特殊字符。这些是简单的单词。 这是我的Java类。实体: Rest服务等级: 我尝试使用注释JsonRawValue来表示字符串属性: 但在这种情况下,结果是: 我期望: 很明显,Jackson以某种