簡體   English   中英

我正在嘗試制作一個頻率表,其中 Var1 僅使用一個值,而 Var3 未出現在表中,但過濾表中的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM