8 数据框筛选重写
题目8: 数据框 mtcars,对满足某些条件比如行 2 到 5、列为 ‘cyl’ 的数据进行重写,重写的条件为如果该值小于 6 就重写为 2。(类似题目)
N 版
mtcars$cyl[2:5][mtcars$cyl[2:5] < 6] <- 2
# or
transform(mtcars[2:5,],
new_cyl = ifelse(cyl < 6, 2, cyl))
## mpg cyl disp hp
## Mazda RX4 Wag 21.0 6 160 110
## Datsun 710 22.8 2 108 93
## Hornet 4 Drive 21.4 6 258 110
## Hornet Sportabout 18.7 8 360 175
## drat wt qsec vs
## Mazda RX4 Wag 3.90 2.875 17.02 0
## Datsun 710 3.85 2.320 18.61 1
## Hornet 4 Drive 3.08 3.215 19.44 1
## Hornet Sportabout 3.15 3.440 17.02 0
## am gear carb new_cyl
## Mazda RX4 Wag 1 4 4 6
## Datsun 710 1 4 1 2
## Hornet 4 Drive 0 3 1 6
## Hornet Sportabout 0 3 2 8
T 版
library(dplyr)
m1 <- mtcars %>%
filter(row_number() %in% 2:5) %>%
mutate_at(vars(cyl),
~ ifelse(. < 6, . <- 2, . <- 6))
# or
mtcars %>%
mutate(cyl =
ifelse(
(row_number() %in% 2:5 &
cyl < 6),
2,
cyl)) %>%
head()
## mpg cyl disp hp drat wt qsec vs
## 1 21.0 6 160 110 3.90 2.620 16.46 0
## 2 21.0 6 160 110 3.90 2.875 17.02 0
## 3 22.8 2 108 93 3.85 2.320 18.61 1
## 4 21.4 6 258 110 3.08 3.215 19.44 1
## 5 18.7 8 360 175 3.15 3.440 17.02 0
## 6 18.1 6 225 105 2.76 3.460 20.22 1
## am gear carb
## 1 1 4 4
## 2 1 4 4
## 3 1 4 1
## 4 0 3 1
## 5 0 3 2
## 6 0 3 1
另有 data.table版: