R:通过查找同一列中具有条件的数据框中所有大于或小于另一个给定数字的数字来创建新列

我有以下 df

df <- structure(list(position = c(44188968, 44188969, 44188970, 44188975, 
44188977, 44188978), code1 = c(1, 0, 1, 0, 0, 1)), class = "data.frame", row.names = c(NA, 
-6L))

>df
position    code1
44188968    1
44188969    0
44188970    1
44188975    0
44188977    0
44188978    1

当满足以下条件时我想添加另一列code21如果为true,0否则):

  • 对于每一个position,检查对方positions是否位于+/- 3处。如果为true,则另一个position必须具有code1 = 1

然后,我将获得以下内容

position    code1  code2
44188968    1      1
44188969    0      1
44188970    1      1
44188975    0      0
44188977    0      1
44188978    1      0

您能指导我如何取得这样的桌子吗?

编辑:我忘了提及我的数据包含NA

position    code1
44188968    1
44188969    0
44188970    1
44188975    0
44188977    0
44188978    1
NA          1
NA          0
44189323    NA

如果是NA值,code2NA

EDIT2:按照@jazzurro的要求,我正在为我的数据提供所有可能的模式

df <- structure(list(position = c(44188968, 44188969, 44188970, 44188975, 
44188977, 44188979, 44188980, 44189323, 44189324, 44189328, 44189330, 
44189334), code1 = c(1, 0, 1, 0, 0, 1, NA, NA, 1, NA, NA, NA)), class = 
"data.frame", row.names = c(NA, 
-12L))

>df
position    code1
44188968    1
44188969    0
44188970    1
44188975    0
44188977    0
44188979    1
44188980    NA
44189323    NA
44189324    1
44189328    NA
44189330    NA
44189334    NA

所需的输出如下:

position    code1   code2   # explanations
44188968    1       1       # code2 is 1 because 44188970 falls in the window of +/- 3 and code1 of 44188970 is 1. code1 of 44188969 is 0 so it is not taking into account.
44188969    0       1       # code2 is 1 because 44188968 or 44188970 falls in the window of +/- 3 and code1 of 44188968 or 44188970 is 1.
44188970    1       1       # code2 is 1 because 44188968 falls in the window of +/- 3 and code1 of 44188968 is 1.
44188975    0       0       # code2 is 0 because 44188977 falls in the window of +/- 3 but code1 of 44188977 is 0.
44188977    0       1       # code2 is 1 because 44188978 falls in the window of +/- 3 and code1 of 44188978 is 1. code1 of 44188975 is 0 so it is not taking into account.
44188979    1       0       # code2 is 0 because 44188977 falls in the window of +/- 3 but code1 of 44188977 is 0. code1 of 44188980 is NA so it is not taking into account.
44188980    NA      1       # code2 is 1 because 44188977 falls in the window of +/- 3 and code1 of 44188977 is 0.
44189323    NA      1       # code2 is 1 because 44189324 falls in the window of +/- 3 and code1 of 44189324 is 1.
44189324    1       0       # code2 is 0 because 44189323 falls in the window of +/- 3 but code1 of 44189323 is NA.
44189328    NA      0       # code2 is 0 because 44189330 falls in the window of +/- 3 but code1 of 44189330 is NA.
44189330    NA      0       # code2 is 0 because nothing falls in the window of +/- 3.
44189334    NA      0       # code2 is 0 because nothing falls in the window of +/- 3.

先感谢您。

爵士乐

这是我的尝试。鉴于以上所述,您所讨论的范围是+/- 2(不包括3)。我创建了两个数值向量,用于标识每个位置的正负2范围。然后,我进行了逻辑检查。检查是否有任何位置编号保留在每个范围内,并且代码等于1。然后,我取消嵌套该列表,check并创建了一个名为的新列dum_position我提取了在position和中没有相同数字的行dum_position,并且check为TRUE。到这个时候,position我们想要找到的数字。

library(tidyverse)

mutate(df, check = map2(.x = position - 2,
                        .y = position + 2,
                        .f = function(x, y) {between(position, x, y) & code1 == 1})) %>% 
unnest(check) %>% 
group_by(position) %>% 
mutate(dum_position = df$position) %>% 
filter(position != dum_position & check == TRUE) %>% 
distinct(position) %>%
unlist -> mynums

# Add 1 to the rows that have one of the numbers in mynums
mutate(df, code2 = if_else(position %in% mynums, 1, 0))

#  position code1 code2
#1 44188968     1     1
#2 44188969     0     1
#3 44188970     1     1
#4 44188975     0     0
#5 44188977     0     1
#6 44188978     1     0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫:具有条件的另一个数据框中的新数据框

来自分类Dev

从R中的另一个列表创建具有条件值的新列表(子列表)

来自分类Dev

pyspark:如何在具有条件的列中填充值并用另一个数据框中的列替换

来自分类Dev

从另一个数据框中减去具有条件的数据框中的值

来自分类Dev

将数据集中的同一列合并到R中另一个列的所有列上?

来自分类Dev

R:当行数大于1时,如何从另一个Group_By数据框中删除有条件的行

来自分类Dev

我有一个数据框,并想用另一列中的相同值来填充前几行中所有空列的值?

来自分类Dev

查找与另一个数据框中的列具有相同的非唯一列值的数据框中的行

来自分类Dev

R-有条件地用另一个数据框中的值替换值

来自分类Dev

获取数据框中所有列的均值并创建一个新的数据框

来自分类Dev

如何从具有重复的R的另一个数据框中更新具有特定列的数据框中的新列?

来自分类Dev

如何有条件地回显多维数组的一列中的一个或所有值?

来自分类Dev

将数据框的每一列除以另一个数据框的所有列

来自分类Dev

根据一列中所有值的组合来熊猫新数据框

来自分类Dev

在另一个表中具有条件的Phalcon模型find()

来自分类Dev

在另一个单元格中具有条件的SUMIF函数

来自分类Dev

有条件地在R中用另一列(但不在同一行中)的值填充一列的值

来自分类Dev

如何创建一个列来存储 MySQL 中另一个表中所有相关记录的总和

来自分类Dev

有条件地将一列替换为另一列(R)

来自分类Dev

通过将函数应用于另一个数据框的列来创建新的数据框

来自分类Dev

VBA /宏添加带有条件的另一个列

来自分类Dev

R:在满足条件的行中查找一个值,向该值添加某些数字,然后在该行的另一列中创建一条消息

来自分类Dev

创建一个在每一列中具有随机数的数据框

来自分类Dev

R根据另一列中的文本有条件地替换NA

来自分类Dev

通过使用基于另一个数据框的查找替换以逗号分隔的列的值来创建新列

来自分类Dev

通过在 R 中有条件地组合现有列来创建新列

来自分类Dev

通过将列与另一个数据帧中的列匹配来在数据框中创建新列

来自分类Dev

如何在R中有多个新列是有条件的情况下使用R中的多个列来表示一列的值?

来自分类Dev

将一个数据框中的所有值乘以另一个数据框中的一列,然后将结果保存到新对象中

Related 相关文章

  1. 1

    熊猫:具有条件的另一个数据框中的新数据框

  2. 2

    从R中的另一个列表创建具有条件值的新列表(子列表)

  3. 3

    pyspark:如何在具有条件的列中填充值并用另一个数据框中的列替换

  4. 4

    从另一个数据框中减去具有条件的数据框中的值

  5. 5

    将数据集中的同一列合并到R中另一个列的所有列上?

  6. 6

    R:当行数大于1时,如何从另一个Group_By数据框中删除有条件的行

  7. 7

    我有一个数据框,并想用另一列中的相同值来填充前几行中所有空列的值?

  8. 8

    查找与另一个数据框中的列具有相同的非唯一列值的数据框中的行

  9. 9

    R-有条件地用另一个数据框中的值替换值

  10. 10

    获取数据框中所有列的均值并创建一个新的数据框

  11. 11

    如何从具有重复的R的另一个数据框中更新具有特定列的数据框中的新列?

  12. 12

    如何有条件地回显多维数组的一列中的一个或所有值?

  13. 13

    将数据框的每一列除以另一个数据框的所有列

  14. 14

    根据一列中所有值的组合来熊猫新数据框

  15. 15

    在另一个表中具有条件的Phalcon模型find()

  16. 16

    在另一个单元格中具有条件的SUMIF函数

  17. 17

    有条件地在R中用另一列(但不在同一行中)的值填充一列的值

  18. 18

    如何创建一个列来存储 MySQL 中另一个表中所有相关记录的总和

  19. 19

    有条件地将一列替换为另一列(R)

  20. 20

    通过将函数应用于另一个数据框的列来创建新的数据框

  21. 21

    VBA /宏添加带有条件的另一个列

  22. 22

    R:在满足条件的行中查找一个值,向该值添加某些数字,然后在该行的另一列中创建一条消息

  23. 23

    创建一个在每一列中具有随机数的数据框

  24. 24

    R根据另一列中的文本有条件地替换NA

  25. 25

    通过使用基于另一个数据框的查找替换以逗号分隔的列的值来创建新列

  26. 26

    通过在 R 中有条件地组合现有列来创建新列

  27. 27

    通过将列与另一个数据帧中的列匹配来在数据框中创建新列

  28. 28

    如何在R中有多个新列是有条件的情况下使用R中的多个列来表示一列的值?

  29. 29

    将一个数据框中的所有值乘以另一个数据框中的一列,然后将结果保存到新对象中

热门标签

归档