簡體   English   中英

對兩個變量的 function 中的數據幀中的(字符)值進行計數

[英]Counting (character) values in a data frame in function of two variables

數據:

(實際數據要大得多,但為了清楚起見,我只是在這里展示一個表示)

我有以下向量

Response <- c('blue', 'yellow', 'red', 'yellow', 'blue', 'red', 'red', 'blue', 'yellow', 'green', 'yellow', 'yellow', 'green')

ZN  <- c('C', 'B', 'A','C', 'B', 'A', 'C', 'B', 'A', 'B', 'A', 'B', 'A')

Stimuli <- c('e','e','e','e','e','e','e','e','e','c','c','c','c')

在此數據框中組織:

test <- data.frame(Response, ZN, Stimuli)

解釋:刺激“e”有三個層次(C;B;A),刺激“c”有兩個層次(B;A)。 參與者可以為這些級別分配某些顏色。

目標:針對刺激“e”確定參與者在每個級別(C、B、A)中選擇藍色、紅色或黃色的次數,例如,在示例中,級別 C 選擇了 2 次藍色,選擇了黃色一次)。 對於具有兩個級別(B,A)的刺激“c”也是如此。

一種(繁瑣的)方法是在 ZN =='C' 和 Stimuli == e 時將布魯斯的數量相加

sum(data$Response == 'blue' | data$ZN =='C' | data$Stimuli == e)

然后為黃色和紅色(刺激“e”唯一可能的顏色)執行此操作。 然后為 ZN =='B' 和 ZN =='A' 復制此過程。

必須有更聰明的方法來做到這一點..我只是 R 的新手,如果問題太愚蠢,對不起。 最后,我想要的信息如下:

Stimuli e

ZN = C
2 blue
1 yellow

ZN = B
2 yellow
1 red

ZN = A
2 red
1 yellow

謝謝!

我們可以使用分組來做這種類型的總結。 但是,使用tidyverse ,我們可以使用count() ,這節省了我們必須先編寫group_by()的步驟。 相反,我們只在count()語句中列出我們想要分組的列。

library(tidyverse)

test %>% count(Response, Stimuli, ZN) %>% 
  arrange(Stimuli, ZN, Response)

# A tibble: 11 x 4
# Groups:   Response, Stimuli, ZN [11]
   Response Stimuli ZN        n
   <fct>    <fct>   <fct> <int>
 1 green    c       A         1
 2 yellow   c       A         1
 3 green    c       B         1
 4 yellow   c       B         1
 5 red      e       A         2
 6 yellow   e       A         1
 7 blue     e       B         2
 8 yellow   e       B         1
 9 blue     e       C         1
10 red      e       C         1
11 yellow   e       C         1

這是一個單線基礎 R 解決方案,它以更接近您要求的格式給出答案:

lapply(split(test, test$ZN), function(x) t(table(x$Stimuli, x$Response)))
#> $A
#>         
#>          c e
#>   green  1 0
#>   red    0 2
#>   yellow 1 1
#> 
#> $B
#>         
#>          c e
#>   blue   0 2
#>   green  1 0
#>   yellow 1 1
#> 
#> $C
#>         
#>          e
#>   blue   1
#>   red    1
#>   yellow 1

代表 package (v2.0.1) 於 2022 年 1 月 28 日創建

您的目標以非常具體的方式陳述,因此我不確定您實際需要解決什么問題。

聽起來您想計算刺激、ZN 和響應的可能組合的出現次數。 如果是這種情況,那么只需將它們全部分組並讓dplyr::n根據分組進行計數。 這可能是一個有用的參考。

您可能需要運行install.packages("tidyverse")然后library(tidyverse)才能工作。

data %>%
  dplyr::group_by(Response, ZN, Stimuli) %>%
  dplyr::summarise(
    count = dplyr::n(),
    .groups = "drop")
  tibble::as_tibble()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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