我正在尝试编写代码,其中某个数据框被固定值部分替换。在某些情况下,必须更换零行。下面的代码对此进行了说明:数据框的列hit
完全为FALSE
,并且应为hit==TRUE
填写值。
我尝试同时替换两列。如果我一次只更换一列,如果要替换零行,则替换功能不会按预期执行任何操作。
但是,当我选择一个包含0行和2列的data.frame,并希望将其替换为具有0行和2列的矩阵中的数据时,我得到一个错误,即替换应该是8个元素长。 (即4行/ 2列)。我不明白为什么会这样呢?当然我可以围绕它编程,但我想了解......
df <- data.frame(hit=c(F,F,F,F), a=c(0,0,0,0), b=c(1,1,1,1))
df[df$hit==T,"a"] <- rep(1, length(which(df$hit==T)))
# this does nothing as expected
cbind(
rep(1, length(which(df$hit==T))),
rep(2, length(which(df$hit==T))))
# gives a matrix with 0 rows and 2 columns
df[df$hit==T,c("a", "b")]
# gives a data.frame with 0 rows and 2 columns
df[df$hit==T,c("a", "b")] <- cbind(
rep(1, length(which(df$hit==T))),
rep(2, length(which(df$hit==T))))
# gives an error that my replacement should have 8 elements
答案 0 :(得分:1)
如果 df $ hit 为TRUE,则会更改 df 数据框的 a 列的值, 值更改为 new_a_value 。 b - 值
的情况相同df$a[which(df$hit == T)] <- new_a_value
df$b[which(df$hit == T)] <- new_b_value