我有一个这样的多列数据框:
t <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
v1 <- c(5, 5, 5, 6, 7, 5, 4, 3, 1, 2)
v2 <- c(1, 2, 6, 7, 8, 5, 3, 9, 1, 4)
v3 <- c(6, 4, 3, 2, 8, 4, 3, 1, 2, 4)
dt <- data.frame(t, v1, v2, v3)
我想按列v1
中v2
的v3
条件更改列中的值t
。例如,用零替换3 < t < 7
. 现在我这样做:
dt[dt$t > 3 & dt$t < 7,]$v1 <- 0
dt[dt$t > 3 & dt$t < 7,]$v2 <- 0
dt[dt$t > 3 & dt$t < 7,]$v3 <- 0
但是,如果有很多列,那么代码就比较麻烦了。如果你这样做
dt[dt$t > 3 & dt$t < 7,]<- 0
那么所有列中的值都会发生变化。我希望列中的值t
保持不变。我怎样才能做到这一点?
数据框的行和列可以选择为逻辑向量(等)或数字向量(
dt$t > 3
、等):dt$t < 7
c(1)
2
c(2, 3)
在布尔向量的情况下,行/列选择可以用布尔“非”反转。
在数字向量的情况下,可以通过更改符号(改为“减号”)来反转选择。例如,如果要排除第一列,请将仅包含的向量指定为列索引
-1
(替代表示法:-c(1)
,c(-1)
):