![](/img/trans.png)
[英]Check if for each unique value of var1, there is one observation where its value equals either var2 or var3 by group (var4) in R
[英]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
我正在嘗試制作一個頻率表,其中 VAR1 是一些但不是所有值,並且 VAR3 過濾了用於制作表的行。
ISCED 是 Var1,我只想要 12 和 15 的值。如果可能的話,我不想在我的表中看到 FALSE。 其次,我只想使用 PK_T = 1 的行。不知道該怎么做。
My DF ISCED EMTAK PK_T 12 233 1 12 245 0 12 233 NA 13 233 1 15 433 1 15 245 0
I want ISCED EMTAK Freq True 233 1 True 245 0 True 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 package,我將數據子集為 ISCED 為 12 或 15 的數據,按 EMTAK 和 PK_T == 1 分組,然后使用.N 來計算出現次數,然后我鏈接第二個表達式以限制《國際教育標准分類法》為真的那些。 請注意,我還從最終表中刪除了 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))
然后只使用 baseR 中的dplyr package 和 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()中調整 arguments
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.