我有一个数据集是这样排列的:
ID A B C D Win Loss
001 NA 3 NA NA 6 NA
002 NA NA NA NA NA 17
003 1 5 12 18 NA 22
004 NA 7 9 NA 31 NA
005 8 2 NA NA NA 14
006 2 6 12 19 25 NA
007 NA NA NA NA 6 NA
在这个数据集中,ID应该按时间顺序通过每个阶段(A、B、C、D),并在最后达到赢/输(ID 003和006)
但是,有时 ID 向后移动 (ID 005),其他 ID 跳过阶段(ID 001 和 004),而有些则直接转到赢/输(ID 002 和 007)。
我想用dplyr mutate逻辑调用这些。输出:
ID A B C D Win Loss Backwards Skip Just W/L
001 NA 3 NA NA 6 NA F T F
002 NA NA NA NA NA 17 F T T
003 1 5 12 18 NA 22 F F F
004 NA 7 9 NA 31 NA F T F
005 8 2 NA NA NA 14 T T F
006 2 6 12 19 25 NA F F F
007 NA NA NA NA 6 NA F T T
我知道我应该用类似这样的逻辑,但是我我就是想不通。
提前感谢。
编辑:
奖励积分,如果你也可以告诉我如何计算每个阶段之间经过的时间/天,即使它跳过了几个。
这可以使用基本R
来完成。选择感兴趣的列df[LETTERS[1:4]]
,创建存在/不存在“NA”的逻辑矩阵(is.na(df[...)
)。]否定它(!
),以便非NA元素变为“TRUE”,获取行和行和行
并否定它!
因此具有0
非NA值的行将变为TRUE,而只有赢或输的情况就是这样。对于“向后”,我们可以对行使用循环方法(apply(
)(MARGIN=1
),检查非NA元素(diff(na.omit(x)))
的差值是否有任何负数(any(....)
JustWL <- !rowSums(!is.na(df[LETTERS[1:4]]))
Backwards <- apply(df[LETTERS[1:4]], 1, function(x) any(diff(na.omit(x))<0))
Skip <- !!rowSums(is.na(df[LETTERS[1:4]]))
df1 <- data.frame(df, JustWL, Backwards, Skip)
df1
# ID A B C D Win Loss JustWL Backwards Skip
# 1 1 NA 3 NA NA 6 NA FALSE FALSE TRUE
# 2 2 NA NA NA NA NA 17 TRUE FALSE TRUE
# 3 3 1 5 12 18 NA 22 FALSE FALSE FALSE
# 4 4 NA 7 9 NA 31 NA FALSE FALSE TRUE
# 5 5 8 2 NA NA NA 14 FALSE TRUE TRUE
# 6 6 2 6 12 19 25 NA FALSE FALSE FALSE
# 7 7 NA NA NA NA 6 NA TRUE FALSE TRUE
或者在< code>dplyr
中使用相同的代码
library(dplyr)
df %>%
mutate(JustWL=!rowSums(!is.na(.[LETTERS[1:4]])),
Skip=!!rowSums(is.na(.[LETTERS[1:4]]))) %>%
rowwise() %>%
do(data.frame(., Backwards=
any(diff(na.omit(unlist(.[LETTERS[1:4]])))<0)))
考虑以下数据框架: 这就产生了: 我希望按类分组,如果每个组包含两个成员,然后从中减去1,如果,否则,从中减去该组中最小值...如果每个组不包含两个成员,那么我们从中减去零。 使用包执行上述操作的代码可以使用以下表达式表示: 但是,这会产生不正确的结果,其中第二个始终解析为第一个条件: 如果没有第一条语句,则可以生成正确的结果。 生产: 通过检查成功完成类似工作的其他代码片段,我们可以看到这个问题
我有一个名称重复的数据集。如果名称重复,我想创建一个值为1(TRUE)或0(FALSE)的新列。 这是我使用的代码: 或者 然而,我得到了上面可以看到的错误。 另一个想法是使用group_by,然后计算计数。喜欢: 但是,它不能返回原始数据帧后group_by
我用R编写了以下代码,效果很好。但是,假设我必须对具有多个级别的因子变量应用类似的代码(
在一个有四列的大数据框(“myfile”)中,我必须添加第五列,其中的值有条件地基于前四列。 更喜欢使用和的答案,主要是因为它在大型数据集中的速度。 我的数据框如下所示: 第五列(V5)的值基于一些条件规则: 现在我想使用函数在所有行上使用这些规则(以避免慢循环)。类似这样的事情(是的,我知道这样不行!): 结果应该是: 如何在dplyr中执行此操作?
我有一个带有两个得分列的data.frame。我希望在每行的基础上有条件地使用其中一个的数据。我用下面的一个例子来解释... 在这种情况下,Final最终将与test_low相同,因为对于两个Mains(即,当单元格为'high'时,单元格为'low时),test_low列小于test_high列。
我正在努力编写一个具有多个和/或条件的弹性搜索查询。 它的基本逻辑如下: 正如docs中提到的,如果一个文档只满足must子句,那么它就被认为是匹配的。在这种情况下,should子句起到增强作用,即如果文档除了mouth子句之外还匹配一个或多个should子句,那么它将具有更高的相关性得分,假设cond2、cond3和cond4是计算相关性得分的查询。 问题是我只想要至少匹配OR条件之一的文档。