【发布时间】:2015-04-19 01:00:45
【问题描述】:
我正在尝试解决 R 中数据框的一个小问题。我的数据框 Base 看起来像这样(我在最后一面添加了 dput() 版本):
ID I1 I2 I3 Col
1 001 0 2 1 2
2 002 1 2 NA 3
3 003 3 2 NA 1
我的数据框有一个 id 变量、数字变量 (I1,I2,I3) 和一个名为 Col 的索引变量。我想用1 的值填充所有行,从I1 列开始,直到其索引保存在Col 中的列。例如,在第二行Col 显示值为3 的情况下,使用1 的填充过程应该从列I1 开始,直到列I3。相同的逻辑适用于其他行。我已经尝试过这个解决方案,但它不起作用:
Base[-1] <- apply(Base[2:5],1,function(x) {x[1:x[4]]=1})
因为此代码使用1 填充所有行,而不考虑保存在Col 中的索引列。有了这段代码,我得到了这个:
ID I1 I2 I3 Col
1 001 1 1 1 1
2 002 1 1 1 1
3 003 1 1 1 1
我想得到这样的数据框:
ID I1 I2 I3 Col
1 001 1 1 1 2
2 002 1 1 1 3
3 003 1 2 NA 1
另外,我尝试通过x[1:x[x[4]]]=1 更改函数内部的x[1:x[4]]=1,但它不起作用。 dput() 版本的 Base 是下一个:
Base=structure(list(ID = c("001", "002", "003"), I1 = c(0, 1, 3),
I2 = c(2, 2, 2), I3 = c(1, NA, NA), Col = c(2, 3, 1)), .Names = c("ID",
"I1", "I2", "I3", "Col"), row.names = c(NA, -3L), class = "data.frame")
感谢您的帮助。
【问题讨论】:
标签: r