【问题标题】:conditionally fill dataframe column based on a range of values from 2 columns根据 2 列中的值范围有条件地填充数据框列
【发布时间】:2013-02-12 05:31:37
【问题描述】:

我目前有这个循环来根据一系列索引修剪数据集 (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

【问题讨论】:

  • 你应该添加示例数据
  • 抱歉,目前还不清楚。你必须更好地解释你想要做什么。 DF_2 是什么?为什么DF 中的new_column 为空?等等……
  • 好的-所以 df_2 是我原始的未编辑数据框。我正在从以 df3 的开始值和结束值为条件的循环创建一个已编辑的帧 (df)。新列是空的,因为我需要创建它(不是问题),并用 df_3$new_column_values 中的值填充它,具体取决于 df_3$start 和 df_3$end 中的范围值。这有帮助吗??
  • @Carlos_psy,df_2 是什么样的。此外,如果您更加一致,那将非常有帮助。 R 是 CaSe SeNsItIvE,并且您发布的示例有时您的 data.frame 是“df”,而其他人是“DF”。

标签: r loops conditional fill


【解决方案1】:

如果我正确理解您的问题,您或许可以使用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”不是(以当前形式)数字变量,而是一个因子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2023-03-04
    • 2022-11-14
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多