我正在为数据集中的多个变量设置子集,以删除无用的数据点。当我输入第一个变量的subset命令并检查数据集时,该变量已正确成为子集。但是,对第二个变量执行相同的操作后,第一个不再是数据集中的子集。似乎第二个子命令覆盖了第一个子命令。在该示例中,一旦我对第二个变量(Weight)进行了子集化,我就想到第一个变量(Height)不再是子集。关于如何解决这个问题有什么想法吗?
rTestDataSet = TestDataSet
rTestDataSet = subset(TestDataSet, TestDataSet$Height < 4)
rTestDataSet = subset(TestDataSet, TestDataSet$Weight < 3)
答案 0 :(得分:1)
您正在将两个子集都应用于原始数据。您需要做的是应用一个子集,将其保存到变量中,然后将第二个子集应用于此新变量。另外,正如已经指出的,使用子集时不需要$。
尝试:
制作一些可重复的数据:
set.seed(50)
TestDataSet <- data.frame("Height" = c(sample(1:10,30, replace = T)), Weight = sample(1:10,30, replace = T) )
rTestDataSet = TestDataSet
rTestDataSet = subset(rTestDataSet, Height < 4)
rTestDataSet
Height Weight
3 3 5
6 1 7
9 1 4
10 2 5
12 3 9
14 1 1
15 3 1
19 1 8
20 2 9
22 2 8
28 3 6
rTestDataSet = subset(rTestDataSet, Weight < 3)
rTestDataSet
Height Weight
14 1 1
15 3 1
答案 1 :(得分:1)
为什么不使用tidyverse
?将操作链接在一起以创建自己的逻辑。可以使用subset
代替filter
来有条件地获取所需的行:
library(tidyverse)
TestDataSet %>%
filter(Height < 4) %>%
filter(Weight < 3)
或
TestDataSet %>%
filter(Height < 4 & Weight < 3)