我正在尝试创建一个频率 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()
中的参数
我正在尝试创建一个频率 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()
中的参数