数据框 R dplyr 中周围值的范围

标签 r dataframe range dplyr

我有一个看起来像这样的数据框:

test <- data.frame(chunk = c(rep("a",27),rep("b",27)), x = c(1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1))

我想使用dplyr中的group_by()对数据进行分组,在本例中称为chunk

我想向名为 x1test 的每个 block 添加另一列,因此生成的数据框如下所示:

test1 <- data.frame(test, x1 = c(0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0))

x1 标识 x 中所有出现的 0,并从末尾的 0 开始在每个方向上取 +-5 行的范围,并添加一个标识符。标识符是什么并不重要,但在本例中,x1 中的标识符为 1(表示范围),2(表示 x

中出现 0)

感谢您的帮助!

最佳答案

这里有一个在 dplyr 中执行此操作的选项:

较短的版本:

n <- 1:5
test %>%
  group_by(chunk) %>%  
  mutate(x1 = ifelse((row_number() - min(which(x == 0))) %in% -n |
       (row_number(chunk) - max(which(x == 0))) %in% n, 1, ifelse(x == 0, 2, 0))) 

较长(第一个)版本:

test %>%
  group_by(chunk) %>%
  mutate(start = (row_number() - min(which(x == 0))) %in% -5:-1,
         end = (row_number() - max(which(x == 0))) %in% 1:5,
         x1 = ifelse(start | end, 1, ifelse(x == 0, 2, 0))) %>%
  select(-c(start, end))

Source: local data frame [54 x 3]
Groups: chunk

   chunk x x1
1      a 1  0
2      a 1  0
3      a 1  0
4      a 1  0
5      a 1  0
6      a 1  0
7      a 1  0
8      a 1  1
9      a 1  1
10     a 1  1
11     a 1  1
12     a 1  1
13     a 0  2
14     a 0  2
15     a 0  2
16     a 0  2
17     a 1  1
18     a 1  1
19     a 1  1
20     a 1  1
21     a 1  1
22     a 1  0
23     a 1  0
24     a 1  0
25     a 1  0
26     a 1  0
27     a 1  0
28     b 1  0
29     b 1  0
30     b 1  0
31     b 1  0
32     b 1  0
33     b 1  0
34     b 1  0
35     b 1  1
36     b 1  1
37     b 1  1
38     b 1  1
39     b 1  1
40     b 0  2
41     b 0  2
42     b 0  2
43     b 0  2
44     b 1  1
45     b 1  1
46     b 1  1
47     b 1  1
48     b 1  1
49     b 1  0
50     b 1  0
51     b 1  0
52     b 1  0
53     b 1  0
54     b 1  0

此方法的假设是,在每组“ block ”中只有一个 0 序列(如样本数据中所示)。如果您的实际数据并非如此,请告诉我。

关于数据框 R dplyr 中周围值的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415587/

相关文章:

r - 将 GeoJSON 转换为 R 中的简单特征

R:直接从 web url 读取 geotiff 数据(httr::GET 原始内容)

python - 如何修剪 pandas.read_csv 中的标题值

python - 来自类别列中的类标记的多个数据帧的 pairplot 列

python - 如何在 python 中生成 50 种随机颜色的列表?

mysql范围查询性能

javascript - 如何将其制作为 HighChart(附图)

r - 我们可以有更多的错误(消息)吗?

python - 从成对组合中识别集合

python - 仅当列没有值时,Pandas DataFrame 才从另一个数据帧更新