BASE R环境下根据单表列条件修改另一表对应行指定列值方案
需求说明
基于R内置数据集mtcars和iris实现如下逻辑:截取两个数据集的前5行生成新数据框,以mtcars派生数据框的mpg列为判断条件,当该列值小于20时,将iris派生数据框对应行的Sepal.Length字段值设置为NA。要求仅使用BASE R语法实现,不引入tidyverse相关依赖。
样例初始数据
# mtcars前5行数据 df1 <- head(mtcars, 5) df1 > mpg cyl disp hp drat wt qsec vs am gear carb > Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 > Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 > Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 > Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 > Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
# iris前5行数据 df2 <- head(iris, 5) df2 > Sepal.Length Sepal.Width Petal.Length Petal.Width Species > 1 5.1 3.5 1.4 0.2 setosa > 2 4.9 3.0 1.4 0.2 setosa > 3 4.7 3.2 1.3 0.2 setosa > 4 4.6 3.1 1.5 0.2 setosa > 5 5.0 3.6 1.4 0.2 setosa
BASE R实现代码
# 筛选出df1中mpg小于20的行索引 cond_index <- which(df1$mpg < 20) # 为df2对应行的Sepal.Length赋值NA df2$Sepal.Length[cond_index] <- NA
最终输出结果
修改后df1保持不变,df2的输出如下:
df2 > Sepal.Length Sepal.Width Petal.Length Petal.Width Species > 1 5.1 3.5 1.4 0.2 setosa > 2 4.9 3.0 1.4 0.2 setosa > 3 4.7 3.2 1.3 0.2 setosa > 4 4.6 3.1 1.5 0.2 setosa > 5 NA 3.6 1.4 0.2 setosa
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

