小编Fab*_*ian的帖子

R:调整案例多次出现的值

我有一个问题,希望不会成为高级R用户的巨大障碍......

test.data <- data.frame(case = c(1, 1, 1, 2, 2, 2, 3),
                        year = c(2006, 2007, 2008, 2007, 2006, 2008, 2006),
                        level = c(10, 20, 20, 12, 20, 20, 20))
Run Code Online (Sandbox Code Playgroud)

正如您可能看到的那样,每个案例都有多次出现,以年份为特征.级别的值在一个案例中不同,我想通过将级别的每个值设置为给定案例的最小级别来纠正它.在这个例子中,每个值水平为= 1时应该是10,并且每个值级别 = 2应该是12.对于我可以做以下的任何特定情况下的情况:

test.data$level[test.data$case==1] <- min(test.data$level[test.data$case==1])
Run Code Online (Sandbox Code Playgroud)

但由于我有几百个案例,这需要很长时间.因此,我想问一下你是否有更快的解决方案.

r

5
推荐指数
2
解决办法
125
查看次数

R - 将数字向量拆分为间隔

我有一个关于矢量"分裂"的问题,尽管不同的方法可能是可行的.我有一个data.frame(df),看起来像这样(简化版):

   case time
1   1   5
2   2   3
3   3   4
Run Code Online (Sandbox Code Playgroud)

"时间"变量计算事件发生前的时间单位(天,周等).我想通过增加行数来扩展数据集,并将"时间""拆分"为长度为1的间隔,从2开始.结果可能如下所示:

    case    time    begin   end
1   1       5       2       3
2   1       5       3       4
3   1       5       4       5
4   2       3       2       3
5   3       4       2       3
6   3       4       3       4
Run Code Online (Sandbox Code Playgroud)

显然,我的数据集比这个例子略大.实现这一结果的可行方法是什么?

我有一个开头的想法

df.exp <- df[rep(row.names(df), df$time - 2), 1:2]
Run Code Online (Sandbox Code Playgroud)

为了扩大每个案例的行数,根据时间间隔的数量.基于此,可以以下列方式添加"开始"和"结束"列:

df.exp$begin <- 2:(df.exp$time-1)
Run Code Online (Sandbox Code Playgroud)

但是,我没有成功创建相应的列,因为此命令仅使用第一行来计算(df.exp $ time-1),并且不会自动区分"case".

任何想法将非常感谢!

time split r intervals

5
推荐指数
2
解决办法
1039
查看次数

标签 统计

r ×2

intervals ×1

split ×1

time ×1