如何使用tidyverse转换一组反向列的类?
在这里,数据框 sumtbl
具有临床试验患者Bill和Ted的实验室测试结果,并且反向列的类别是因子 . 我使用tidyr spread
函数将实验室结果从长到宽转换 . 我在这个例子中使用as.character,因为在现实世界中,我的结果是存储为字符值的数字 .
set.seed(7073)
basetbl <- data.frame(pt = c("BILL","TED"),
res = as.character(abs(rnorm(10))),
day = rep(c(1:5), 2))
sumtbl <- basetbl %>%
group_by(pt) %>%
spread(key = day, value = res) %>%
ungroup()
我尝试过的解决方案之一就是创建一个带有反引号列名的字符向量,但后来我使用_1117105会产生一个评估错误 - 找不到对象 .
modcols <- sapply(seq(1:tail(colnames(sumtbl), 1)), function(x) paste0('`',x, '`'))
outtbl <- sumtbl %>%
mutate_at(modcols, funs(as.numeric(.)))
我可以直接更改列,但有更好的方法吗?
sumtbl$`1` <- as.numeric(sumtbl$`1`)
2 回答
我们可以使用
names
来选择列请注意,反引号仅在打印输出中显示 . 如果我们看一下
names
所以,'modcols'将是
这里不需要包含
vars
以下将有效 . 此外,您要将因子转换为数字,因此必须首先将因子转换为字符,然后使用
as.numeric(as.character(.))
将数字转换为数字 .