数据框赋值
处理列表和矩阵的两种方法都可以用来为一个数据框子集赋值。
1.以列表方式赋值
我们可以同时使用$和<-对列表中的成分重新赋值。
df1$score <- c(0.6, 0.3, 0.2, 0.4, 0.8)
df1
## id level score
## a 1 0 0.6
## b 2 2 0.3
## c 3 1 0.2
## d 4 -1 0.4
## e 5 -3 0.8
此外,[也是适用的,而且它允许在一个语句中进行多重修改,但是使用[[每次只能
修改一列。
df1["score"] <- c(0.8, 0.5, 0.2, 0.4, 0.8)
df1
## id level score
## a 1 0 0.8
## b 2 2 0.5
## c 3 1 0.2
## d 4 -1 0.4
## e 5 -3 0.8
df1[["score"]] <- c(0.4, 0.5, 0.2, 0.8, 0.4)
df1
## id level score
## a 1 0 0.4
## b 2 2 0.5
## c 3 1 0.2
## d 4 -1 0.8
## e 5 -3 0.4
df1[c("level", "score")] <- list(level = c(1, 2, 1, 0, 0), score = c(0.1,
0.2, 0.3, 0.4, 0.5))
df1
## id level score
## a 1 1 0.1
## b 2 2 0.2
## c 3 1 0.3
## d 4 0 0.4
## e 5 0 0.5
2.以矩阵方式赋值
当我们以列表方式对数据框进行赋值时,会遇到与构建子集时同样的问题,即只能访
问列。若需要更加灵活地进行赋值操作,可以以矩阵方式进行。
df1[1:3, "level"] <- c(-1, 0, 1)
df1
## id level score
## a 1 -1 0.1
## b 2 0 0.2
## c 3 1 0.3
## d 4 0 0.4
## e 5 0 0.5
df1[1:2, c("level", "score")] <- list(level = c(0, 0), score = c(0.9, 1.0))
df1
## id level score
## a 1 0 0.9
## b 2 0 1.0
## c 3 1 0.3
## d 4 0 0.4
## e 5 0 0.5