我想找出基于特定条件的行之间的差异。我使用dplyr和带lag的变异函数设法做到了这一点。我大约有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的新手,它看起来确实很酷。
发布于 2016-08-22 13:26:59
示例数据
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
https://stackoverflow.com/questions/39080716
复制相似问题