我正在尝试制作一个频率表,其中Var1仅使用一个值,而Var3不在表中出现,但在表中过滤数据

问题描述 投票:0回答:3

我正在尝试制作一个频率表,其中VAR1是一些但不是所有值,而VAR3过滤了用于构成该表的行。

ISCED是Var1,我只希望值是12和15。如果可能的话,我不想在表中看到FALSE。其次,我只想使用PK_T = 1的行。无法弄清楚该怎么做。

我的DFISCED EMTAK PK_T12233 112245 012233不适用13233 115433 115245 0
我想要ISCED EMTAK频率真233 2真245 0真实433 2
r frequency
3个回答
0
投票

使用您的数据和data.table包,我将数据子集划分为ISCED为12或15的数据,并按EMTAK和PK_T == 1分组,然后使用.N计数出现的次数,然后链接第二个该表达式限制为ISCED为TRUE的表达式。注意,我还从最终表中删除了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。


0
投票

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

y <- table(as.factor(x$EMTAK)[!is.na(x$PK_T) & x$PK_T==1])
y <- y[names(y) %in% unique(x$EMTAK[x$ISCED %in% c(12, 15)])]
data.frame(ISCED = TRUE, EMTAK = names(y), Freq = as.vector(y))
#  ISCED EMTAK Freq
#1  TRUE   233    2
#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")

0
投票

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

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))

并且您只希望对于值PK_T = 1仅保留ISCED = 12和ISCED = 15]的值。然后您可以尝试:

test <- myDF %>%
  na.omit %>%
  filter(., ISCED==12 | ISCED==15 & PK_T == 1) %>%
  select(EMTAK, PK_T) %>%
  mutate(frequency= table(.$EMTAK))
© www.soinside.com 2019 - 2024. All rights reserved.