找到两行之间的差异使用dplyr:suppresswarnings()导致强制执行NA

时间:2016-08-22 13:21:18

标签: r dplyr

我想根据特定条件找到行之间的差异。我设法使用dplyr和带滞后的mutate函数来做到这一点。我有大约10列和500行。除了一对,我能够找到列中大多数行的差异。问题是这两个列是因子形式,并使用我的代码导致警告消息:在ops.factor中对因素没有意义。为了解决这个问题,我尝试将数字更改为字符。

y <- mutate(df, d_f = df$L - lag(df$L) + n())    

x <- as.numeric(as.character(df$z))

这会产生警告信息。使用suppresswarnings(x)会导致列中的所有值通过强制变为NA。

如何将因子更改为其他形式,以便找到行之间的差异?导致此问题的列是百分比,如果这有任何区别。

旁注:我是R的新手,看起来确实非常酷。

1 个答案:

答案 0 :(得分:0)

示例数据

df <- data.frame(
    id = c("A", "A", "A", "A", "B", "B", "B"), 
    num = c("1", "8", "6", "3", "7", "7", "9"))

dplyr

的解决方案
library(dplyr)
df_new <- df %>% 
    # factor to numeric
    mutate(num = as.numeric(as.character(num))) %>% 
    # group by condition
    group_by(id) %>% 
    # find difference
    mutate(diff = num - lag(num))

输出

df_new
#       id   num  diff
#   <fctr> <dbl> <dbl>
# 1      A     1    NA
# 2      A     8     7
# 3      A     6    -2
# 4      A     3    -3
# 5      B     7    NA
# 6      B     7     0
# 7      B     9     2