gpt4 book ai didi

r - 每次遇到值时创建一个新的数据框

转载 作者:行者123 更新时间:2023-12-04 09:38:01 24 4
gpt4 key购买 nike

我需要根据特定条件拆分数据框,例如,我有一个数据框my_df,它有一个没有负值的变量k。每次遇到 0 时,我都需要拆分此数据帧 my_df。为了更清楚地解释这一点,下面是我创建 my_df 的代码。

my_df <- data.frame("k" = c(0, 0,0, 0.1,1.3,4,5,7,8,11,14,17,10,5,0.4,0,0,0,1.0,2.3,5,7,3,0.1,0))

执行上述代码后,我的数据框如下所示,

    row_number k  
1 0
2 0
3 0
4 0.1
5 1.3
6 4
7 5
8 7
9 8
10 11
11 14
12 17
13 10
14 5
15 0.4
16 0
17 0
18 0
19 1.0
20 2.3
21 5
22 7
23 3
24 0.1
25 0

当下一个值为零时,我的预期输出将拆分上述数据框。即,创建一个新的数据框 df1,其中包含 第 1 行到第 15 行 的值,类似地,创建另一个数据框 df2,其中包含来自 的值第 16 -24 行,并创建另一个数据框 df3,其值来自 第 25 行,这一直持续到数据框的末尾。

我发现 split() 完成了拆分数据框的工作,但我不知道如何在函数中实现我的要求。

最佳答案

data.table 中,您可以使用函数 rleidv() 创建分组变量:

library("data.table")
my_df <- data.frame("k" = c(0, 0,0, 0.1,1.3,4,5,7,8,11,14,17,10,5,0.4,0,0,0,1.0,2.3,5,7,3,0.1,0))
split(my_df, (rleidv(my_df$k==0) - 1) %/% 2)

这是一个基于 R 的解决方案:

r <- rle(my_df$k!=0)
r$values <- gl((length(r$values) + 1) %/% 2, k=2, length=length(r$values))
split(my_df, inverse.rle(r))

关于r - 每次遇到值时创建一个新的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48900503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com