R 将多列转换为系数,并为其指定数值

R 将多列转换为系数,并为其指定数值,r,dplyr,tidyr,R,Dplyr,Tidyr,我有一个数据框,它包含大约100列,称为“一些文本”。它们是字符,但实际上是一个有序因子NG我们可以使用mutate和cross 或者也可以使用FTTransform FTTransform MV完成此操作-用于多个柱的倒塌 -输出 # ABC_growth ZFG_growth #1 40 <NA> #2 40 <NA> #3 40 <NA> #4

我有一个数据框,它包含大约100列,称为“一些文本”。它们是字符,但实际上是一个有序因子NG我们可以使用mutate和cross

或者也可以使用FTTransform FTTransform MV完成此操作-用于多个柱的倒塌

-输出

#   ABC_growth ZFG_growth
#1          40       <NA>
#2          40       <NA>
#3          40       <NA>
#4          40       <NA>
#5          40       <NA>
#6          12         12
#7          12         12
#8          12         12
#9          12         12
#10         12         12
#11          0        2.5
#12          0        2.5
#13          0        2.5
#14          0        2.5
#15          0        2.5
下面是一个使用lappy的data.table方法,它为每个元素调用一次factor函数。标高和标签用于设置唯一的因子值

df ABC_增长ZFG_增长测试 >1:MG-GG-GG >2:MG-GG-GG >3:MG-GG-GG >4:MG-GG-GG >5:MG-GG-GG >6:LG >7:LG >8:LG >9:LG >10:LG >11:NG SG >12:NG SG >13:NG SG >14:NG SG >15:NG SG 使用grep提取与提供的模式匹配的变量名 cols ABC_增长ZFG_增长 > 1: 40 > 2: 40 > 3: 40 > 4: 40 > 5: 40 > 6: 12 12 > 7: 12 12 > 8: 12 12 > 9: 12 12 > 10: 12 12 > 11: 0 2.5 > 12: 0 2.5 > 13: 0 2.5 > 14: 0 2.5 > 15: 0 2.5
由v0.3.0于2021-03-16创建,非常感谢您在这方面的帮助。我刚刚又仔细地看了一遍我的问题,我想我不清楚我是否还有其他专栏不需要转换为factor。我只需要转换名称中有增长的名称。很抱歉误解。@HCAI更新了帖子。非常感谢您在这方面的帮助。我刚刚又仔细地看了一遍我的问题,我想我不清楚我是否还有其他专栏不需要转换为factor。我只需要转换名称中有增长的名称。很抱歉误解您。请让@akrun告诉您如何正确处理此问题。他是第一个回答这个问题的人,应该得到公认的解决方案:在他更新他的答案后,我会更新我的答案。谢谢@akrun已经更新了他的,所以我也更新了我的解决方案。非常感谢您在这方面的帮助。我只能接受一个答案,你是对的。因为它有多个选项,所以我要选择akrun的Great!如果您还没有这样做并且倾向于这样做,您也可以对我的解决方案进行投票:
df$ABC_growth<-factor(dfH$ABC_growth) #convert to factor
df$ABC_growth <-ordered(dfH$ABC_growth,levels= c("SG","LG","MG","HG")) # order
levels(df$ABC_growth) <- c("2.5","12","40","100")
df <- df %>% 
  mutate(across(contains('growth'), ~ ordered(.,
      levels = c("NG", "SG", "LG", "MG", "HG"), 
       labels = c('0', '2.5', '12', '40', '100'))))
nm1 <- grep('growth', names(df), value = TRUE)
df[nm1] <- lapply(df[nm1], function(x)  ordered(x, 
   levels = c("NG", "SG", "LG", "MG", "HG"), 
       labels = c('0', '2.5', '12', '40', '100')))
library(collapse)
f1 <- function(x)  {
      ordered(x, levels = c("NG", "SG", "LG", "MG", "HG"), 
         labels = c('0', '2.5', '12', '40', '100'))
 }

i1 <- grep('growth', names(df))
ftransformv(df, i1, f1)
#   ABC_growth ZFG_growth
#1          40       <NA>
#2          40       <NA>
#3          40       <NA>
#4          40       <NA>
#5          40       <NA>
#6          12         12
#7          12         12
#8          12         12
#9          12         12
#10         12         12
#11          0        2.5
#12          0        2.5
#13          0        2.5
#14          0        2.5
#15          0        2.5