尽管post显示可以使用反勾号```来选择名称中有空格的列,但在下面的代码中我无法这样做
library(tidyverse)
library(survival)
df <- colon[colon$etype==2, c("time", "age")]
num_summary <- do.call(cbind, lapply(df, summary)) %>%
t() %>% mutate(Interquatrile = `3rd Qu.` - `1st Qu.`)
这将导致以下错误
Error in UseMethod("mutate") :
no applicable method for 'mutate' applied to an object of class "c('matrix', 'array', 'double', 'numeric')"
你能解释一下我做错了什么,以及如何在不重命名列名的情况下解决这个问题吗?
3条答案
按热度按时间brccelvz1#
正如在另一个答案中提到的,这与列名无关,而与
cbind
(以及t
)默认创建 matrix 而不是data. frame这一事实有关。要创建一个表,你根本不需要通过矩阵(和
as_tibble
)来绕路-相反,使用bind_cols
,或者在你的情况下(省略t()
),bind_rows
:上面的代码保留了汇总表的类和属性。这是无害的,但是如果你想去掉无关的属性,只想保留纯数值,你可以对所有列应用
as.vector
(或c
)来实现:bf1o4zei2#
它与你的列无关,而是与你的一般数据结构有关:
使用
as_tibble()
将矩阵转换为tibble( Dataframe ),这样您就可以使用mutate
函数:输出:
sycxhyv73#
您使用
matrix
调用mutate
,但mutate
需要data.frame
。也许你使用
rbind
而不是cbind
和t
,并将matrix
转换为data.frame
,mutate
可以使用它。或者你的代码通过使用
as.data.frame
。或者跳过将
data.frame
和cbind
Interquatrile 转换为矩阵。或者直接在
lapply
调用的函数中执行,并获得matrix
,如果需要,可以将其转换为data.frame
。