筛选变量或个案
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
drop
删除满足条件的行
Stata
drop if x == 1R 包:dplyr
filter(data, x != 1 | is.na(x))Stata 会保留 x 缺失的行;R 中用 | is.na(x) 达到相同效果。
duplicates
keep
根据某些变量取值,保留数据特定行
Stata
keep if x1 == 1 & x2 == 2R 包:dplyr
filter(data, x1 == 1 & x2 == 2)filter() 会删除条件为 NA 的行,因此含缺失值的行不会被保留。
保留多个变量
Stata
keep x1 x3-x5R 包:dplyr
select(data, x1, x3:x5)也可以按位置选择:select(data, 1, 3:5)。select_or_transmute() 还可以同时计算新变量。
另有 6 个示例及替代实现
保留取值在列表中的行
Stata
keep if inlist(x, 1, 3, 5)R 包:dplyr
filter(data, x %in% c(1, 3, 5))保留取值在某个范围内的行
Stata
keep if inrange(x, 5000, 10000)R 包:dplyr
filter(data, between(x, 5000, 10000))sample
抽取 10% 的随机样本,并确保可重复
Stata
set seed 2024; sample 10R 包:tidystata
data |> slice_sample(prop = 0.1) |> set_seed(2024)与 Stata 有差异 R 与 Stata 使用不同随机数流;相同数值种子不会复现相同随机数或抽样行。
抽取 1000 条个案的随机样本,并确保可重复
Stata
set seed 2024; sample 1000, countR 包:tidystata
data |> slice_sample(n = 1000) |> set_seed(2024)与 Stata 有差异 set_seed() 会在抽样之前设定种子,因此可以写在同一条管道中。 R 与 Stata 使用不同随机数流;相同数值种子不会复现相同随机数或抽样行。