在dplyr mutate(cross)调用中创建因子失败
使用NAs在数据集中创建因子级别适用于单个列,但我需要迭代更多的列(所有列都以“impact.”开头),并且在dplyr mutate(跨列)中遇到了一个问题 我做错了什么 下面是雷普雷克斯在dplyr mutate(cross)调用中创建因子失败,r,dplyr,mutate,across,R,Dplyr,Mutate,Across,使用NAs在数据集中创建因子级别适用于单个列,但我需要迭代更多的列(所有列都以“impact.”开头),并且在dplyr mutate(跨列)中遇到了一个问题 我做错了什么 下面是雷普雷克斯 library(tribble) library(dplyr) df <- tribble(~id, ~tumour, ~impact.chemo, ~impact.radio, 1,'lung',NA,1, 2,'lung',1,NA, 3,'lun
library(tribble)
library(dplyr)
df <- tribble(~id, ~tumour, ~impact.chemo, ~impact.radio,
1,'lung',NA,1,
2,'lung',1,NA,
3,'lung',2,3,
4,'meso',3,4,
5,'lung',4,5)
# Factor labels
trt_labels <- c('Planned', 'Modified', 'Interrupted', 'Deferred', "Omitted")
# Such that factor levels match labels as, retaining NAs where present:
data.frame(level = 1:5,
label = trt_labels)
# Create factor works for individual columns
factor(df$impact.chemo, levels = 1:5, labels = trt_labels)
factor(df$impact.radio, levels = 1:5, labels = trt_labels)
# But fails inside mutate(across)
df %>%
mutate(across(.cols = starts_with('impact'), ~factor(levels = 1:5, labels = trt_labels)))
库(tribble)
图书馆(dplyr)
df仅将@27敻9的注释作为一个答案:您在cross
中指定的purr
样式的lambda函数是不正确的,因为它需要第一个参数,这是函数应该引用的对象(在这种情况下,是cross
选择的数据帧列)
要解决您的问题,您应该在lambda函数中插入.x
,该函数是函数(x)x
的快捷方式-有关purr
样式lambda函数的更多信息,请参阅此
df %>%
mutate(across(.cols = starts_with('impact'), ~factor(.x, levels = 1:5, labels = trt_labels)))
# A tibble: 5 x 4
# id tumour impact.chemo impact.radio
# <dbl> <chr> <fct> <fct>
# 1 1 lung NA Planned
# 2 2 lung Planned NA
# 3 3 lung Modified Interrupted
# 4 4 meso Interrupted Deferred
# 5 5 lung Deferred Omitted
df%>%
突变(跨越(.cols=start_with('impact'),~factor(.x,levels=1:5,labels=trt_labels)))
#一个tibble:5x4
#id肿瘤影响。化疗影响。无线电
#
#1计划中的1个
#2 2肺动脉瘤
#3 3肺功能不全
#4中观干扰延迟
#5.忽略了5项
lambda函数不正确-您需要为对象参数包含.x
或
,~因子(.x,levels=1:5,labels=trt_labels))
。或者您甚至可以使用.1
,但您必须选择一个。太棒了,谢谢大家-27ñ9&Ric解决了它:添加.x
参数修复了它。对于未来用户:如果每列不包含≥每个系数级别的1,则需要指定系数级别(此处级别=1:5
),以便观察到的或明确说明的级别数=标签数。