将同一行中特定于行的列索引值左侧的行值替换

用户名

数据表按寿命显示了项目状态报告:

def <- data.frame(c("ProjA", "ProjB", "ProjC"), c("0", "2", "2"), 
              c("Active", "Cancelled", "Distressed"), c("Active", NA, "Distressed"), 
              c("Active", "Cancelled", "Distressed"), c("Active", NA, "Distressed"), stringsAsFactors = FALSE)
colnames(def) <- c("proj.name", "status.update.year", "year.0", "year.1", "year.2", "year.3")
def$status.update.year <- as.numeric(def$status.update.year)

def

  proj.name status.update.year     year.0     year.1     year.2     year.3
1     ProjA                  0     Active     Active     Active     Active
2     ProjB                  2  Cancelled       <NA>  Cancelled       <NA>
3     ProjC                  2 Distressed Distressed Distressed Distressed

status.update.year变量记录从更改"Active"到其他状态的年份

项目应该开始,"Active"但是"Distressed"据报道,在第3年开始的一个项目"Distressed"在过去的所有年份中都有观察到的。我想纠正这种错误的回溯日期。

我想将标记为“ 0”的列的行值更改为“ 3”,以便在状态更新年份之前,将所有非NA观测值在状态更改年份之前标记为“活动”,结果如下:

  proj.name status.update.year     year.0     year.1     year.2     year.3
1     ProjA                  0     Active     Active     Active     Active
2     ProjB                  2     Active       <NA>  Cancelled       <NA>
3     ProjC                  2     Active     Active Distressed Distressed

我可以在最后一个非NA观测值之前找到每一行的所有非NA观测值:

apply(def[ ,3:6], 1, function(x) { head(x[!is.na(x)], -1) }) 

如何将这些值替换"Active"为每行特定的值status.update.year

锡拉尔

试试这个:

library(data.table)
def = data.table(def)

for (y in 0:3) {
  v = paste0('year.',y)
  def[!is.na(get(v)) & y < status.update.year, (v):= 'Active']
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将同一行上多个 Pandas 列的值连接到一个新列中?

熊猫用同一行中的其他列值替换数据框值

根据上一行的值选择特定的行(在同一列中)

将同一行中的多个值连接到列表中

匹配不在同一行和同一列中的特定值

根据Pyspark中另一列的值,有条件地从同一列的另一行值替换一行中的值?

创建一个mySQL视图,其中每一行是同一行中特定列的值

awk 用下一行同一列中的值替换第 i 列中的值

在同一行中写入值

如何使用索引替换特定列中的行值?

在同一行中添加列字段值?

根据一行中的值检索(索引,列)对

根据值将同一列中的上述7行汇总

将数据框值与同一行中的特定列进行比较

如何更改同一行中不同列的特定值?

Spark Dataframe用Null替换一行中特定列的值

根据同一行中的行值逐行更新列值

对于r中的每个组,将NA替换为同一列的另一行中的值

如何用Oracle中应用Lead()函数的同一列的值替换最后一行中的NULL?

从列的每一行中删除特定值

列中的条件值以更改另一列的同一行中的值

numpy:用同一行中其他元素的最大值替换一行中的每个元素

查找与逗号分隔的值在同一行中的行

从分组行中的同一列获取特定值

将同一行中的多行合并

根据 Pandas 中第二列的条件,用另一行的同一列的值填充特定行的列中的值

如果列具有特定值,请使用Google脚本更改同一行中单元格的值

如何用“总计”替换列最后一行的 NULL 值,同时保留“总计”替换同一列中的 NULL 值?

Pandas 在多列中的一行中查找特定值的第一次出现并返回列索引