我正在尝试创建一个频率 table,其中 Var1 仅使用一个值,而 Var3 未出现在 table 中但会过滤 table 中的数据

I'm trying to make a frequency table where Var1 only uses one value and Var3 does not appear in the table but filters data in the table

我正在尝试创建一个频率 table,其中 VAR1 是一些但不是所有值,而 VAR3 过滤用于生成 table.

的行

ISCED 是 Var1,我只想要 12 和 15 的值。如果可能的话,我不想在 table 中看到 FALSE。其次,我只想使用 PK_T = 1 的行。不知道该怎么做。

我的DF
ISCED EMTAK PK_T
 12 233 1
 12 245 0
 12 233 不适用
 13 233 1
 15 433 1
 15 245 0
我要
ISCED EMTAK频率
 真 233 1
 真 245 0
 真 433 1

您可以使用 table 获取 频率。要包含 0 次,您可以使用 as.factor。您可以使用 [x$PK_T==1 的情况进行子集化。要仅获取 ISCED 值为 12 或 15 的那些,您可以使用 %in%:

y <- table(as.factor(x$EMTAK)[x$ISCED %in% c(12, 15) &
   !is.na(x$PK_T) & x$PK_T==1])
data.frame(ISCED = TRUE, EMTAK = names(y), Freq = as.vector(y))
#  ISCED EMTAK Freq
#1  TRUE   233    1
#2  TRUE   245    0
#3  TRUE   433    1

或者仅当所有条件都为真时才使用 aggregate

aggregate(cbind(Freq=PK_T) ~ EMTAK, x[x$ISCED %in% c(12, 15) &
  !is.na(x$PK_T) & x$PK_T==1,], length)
#  EMTAK Freq
#1   233    1
#2   433    1

数据:

x <- read.table(header=TRUE, text="ISCED    EMTAK    PK_T  
 12       233      1
 12       245      0
 12       233      NA
 13       233      1
 15       433      1
 15       245      0")

使用您的数据和 data.table 包,我将数据子集化为 ISCED 为 12 或 15 的数据,按 EMTAK 和 PK_T == 1 分组,然后使用 .N 来计算出现的次数,然后我链接第二个表达式以限制 ISCED 为 TRUE 的那些。请注意,我还从最终的 table 中删除了 PK_T 变量 - 它没有意义,因为变量没有变化。

library(data.table)
dt1[ISCED %in% c(12, 15), .N, by = .(EMTAK, PK_T == 1)][PK_T == TRUE, -"PK_T"]

给予

   EMTAK N
1:   233 1
2:   433 1

你的数据是正确答案,233 只有一次出现,其中 PK_T 是 1,另一次出现是 NA。

基本的 R 等价物是

table(df1[df1$ISCED %in% c(12, 15) & df1$PK_T == 1, "EMTAK"])

如果我们假设您的数据集与您提供的一样:

myDF <- data.frame(ISCED=c(12, 12, 12, 13, 15, 15), EMTAK=c(233, 245, 233, 233, 433, 245), PK_T=c(1, 0, NA, 1, 1, 0))

然后仅使用 dplyr 包和来自 baseR 的 table() 您可以:

install.packages("dplyr")
library(dplyr)

newDF <- myDF %>%
  na.omit %>%                        # remove NA values
  filter(PK_T==1) %>%
  filter(ISCED==12 | ISCED==15) %>%
  select(EMTAK) %>%                  # drop the column ISCED
  mutate(Freq= table(.$EMTAK))       # mutate() creates the new column "Freq"

给予:

  EMTAK      Freq
1   233         1
2   433         1

如果您想进行其他组合,则调整 filter()

中的参数