如何将以下列的值(因子)带入R中的其他新列

时间:2019-07-28 15:35:56

标签: r

我想将相同的值从其他列(因子)带到新列(我想是因子)。

我收到此错误。

1: In `[<-.factor`(`*tmp*`, e, value = structure(10L, .Label = c("RSE7056",  ... :
  invalid factor level, NA generated

我尝试了以下代码

  for (e in 1:(a-1)) {
    if (data7$Freq[e]>1 && data7$RSE_ID[e] == data7$BEFORE_RSE_ID[e+1] && data7$NOW_COLCT_YMDHMS2[e] == data7$BEFORE_COLCT_YMDHMS2[e+1])  {
      data7$AFTER_RSE_ID[e] <- as.factor(data7$RSE_ID[e-1])
      data7$AFTER_time[e] <- 1
    }    
  }

我希望data7$AFTER_RSE_ID[e]RSE~相同data7$RSE_ID[e-1] 但它变成了三位数。

字符如下。

$ BEFORE_RSE_ID       : Factor w/ 404 levels "RSE1501","RSE1502",..: 309 160 160 159 166 188 169 183 188 169 ...
$ RSE_ID              : Factor w/ 26 levels "RSE7056","RSE7058",..: 7 10 10 7 26 8 13 12 17 14 ...
 $ AFTER_RSE_ID        : Factor w/ 26 levels "158","160","161",..: NA NA NA NA NA NA NA NA NA NA ...
result from the code I made

THE code I made

the whole result I get

THE result I want

THE result I want

1 个答案:

答案 0 :(得分:1)

该错误是由于列的类型为factor,并且在向该列添加一些新值时,应该levels被预先分配或使用新的factor列或使用character转换为as.character更容易。另外,可以使用for

与下一个元素进行值比较,而不是lead循环。
library(dplyr)
data7 %>%
    mutate_if(is.factor, as.character) %>% # change factor columns to character
    mutate(ind =Freq > 1 & 
               (RSE_ID == lead(BEFORE_RSE_ID,default = first(BEFORE_RSE_ID))) &
  (NOW_COLCT_YMDHMS2 == lead(BEFORE_COLCT_YMDHMS2, 
                     default = first(BEFORE_COLCT_YMDHMS2))),
       AFTER_RSE_ID = case_when(ind~ lag(RSE_ID), TRUE ~ RSE_ID),
      AFTER_time = as.integer(ind))