我想将相同的值从其他列(因子)带到新列(我想是因子)。
我收到此错误。
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
答案 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))