【发布时间】:2016-03-18 11:54:56
【问题描述】:
我正在尝试对我的数据进行子集化,以删除具有某些变量的某些值的行。假设我有一个包含许多列和行的数据框 df,我想根据变量 G1 和 G9 的值删除行,并且我只想保留这些变量取值为 1、2 或 3 的行。这样,我的目标是跨多个变量对相同的值进行子集化。
我正在尝试使用几行代码并以一种允许快速更改我想使用的变量或值的方式来做到这一点。例如,假设我从数据框 df 开始并希望以 newdf 结束,这不包括 G1 和 G9 不采用值 1、2 或 3 的观察:
# Naive approach (requires manually changing variables and values in each line of code)
newdf <- df[which(df$G1 %in% c(1,2,3), ]
newdf <- df[which(newdf$G9 %in% c(1,2,3), ]
# Better approach (requires manually changing variables names in each line of code)
vals <- c(1,2,3)
newdf <- df[which(df$G1 %in% vals, ]
newdf <- df[which(newdf$G9 %in% vals, ]
如果我不仅想对 G1 和 G9 进行子集化,还想对许多变量进行子集化,那么这种手动方法修改起来会很耗时。我想通过将所有代码合并到一行中来进一步简化这一点。我知道以下内容是错误的,但我不确定如何实施替代方案。
newdf <- c(1,2,3)
newdf <- c(df$G1, df$G9)
newdf <- df[which(df$vars %in% vals, ]
据我了解,我想使用apply(),但我不确定如何使用。
【问题讨论】:
-
请提供要操作的数据集。 MWE(最小工作示例)使我们能够提供简明的答案。