有条件地根据2列的值范围填充数据帧列

时间:2013-02-26 16:45:59

标签: r loops conditional fill

我目前有这个循环来根据一系列索引修剪数据集(df_2)中的行,包括从df_3中的2列中获取的部分的开始和结束索引,并创建一个新文件(df)

for(i in 1:nrow(df_3)){
  if (i==1) df <- df_2[df_3$start[i]:df_3$end[i],]
  else df <- rbind(df,df_2[df_3$start[i]:df_3$endi],])
}

每个部分都有一个与之关联的值,它包含在df_3的第3列中。我想在df中创建一个新列,重复与该部分关联的值。

非常感谢一些帮助,请随时要求澄清 - 尽可能简洁!

根据Joran的建议 - 这里有一些例子

DF

index  new_column
0     
1
2
3
4
5
6
7
8
9
10

DF_3

start  _end  new_column_values

0      3     1
4      6     2
7      10    3

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您可以使用cut,如下所示:

DF$new_column <- cut(DF$index, 
                     breaks = c(DF_3$start[1], DF_3$end), 
                     include.lowest = TRUE, 
                     labels = DF_3$new_column_values)
DF
   index new_column
1      0          1
2      1          1
3      2          1
4      3          1
5      4          2
6      5          2
7      6          2
8      7          3
9      8          3
10     9          3
11    10          3

在此,我正在尝试利用可用的信息。我们基本上为DF$index创建了一个因子,因子级别由另一个data.frame中的范围确定。因此,对于cut,我将breaks设置为包含第一个起始值和所有结束值的向量,并且我将“标签”设置为“new_column_values”中的值“变量。

请注意,生成的“new_column”不是(在当前形式中)数字变量,而是一个因子。