为什么在data.frame中部分替换0行和2列不起作用?

时间:2016-02-16 16:51:12

标签: r dataframe

我正在尝试编写代码,其中某个数据框被固定值部分替换。在某些情况下,必须更换零行。下面的代码对此进行了说明:数据框的列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

1 个答案:

答案 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