我有一個這樣的資料集,其中Count是每個參與者的1的序列:
我有一個這樣的資料集,其中Count是每個參與者的1的序列。
Participant TrialNumber Correct Count
118 1 1 1
118 21 2
118 31 3
118 4 1 4
118 5 1 5
120 1 1 1
120 2 0 0
120 3 0 0
120 4 1 1
120 5 1 2
121 1 1 1
121 21 2
121 31 3
121 4 1 4
121 5 0 0
我需要找到所有計數為4的試驗號碼,如果一個參與者的計數不是4(即參與者120),就寫0。
這是我目前擁有的代碼:
df< -df[with(/span>df, ! (Count> 4)),]/span>
df$Performance< - ifelse(df$Count==4。 df$TrialNumber, NA)
df_Performance< -aggregate(Performance~Participant。 data=df, first)
這樣做的唯一問題是,我失去了任何沒有數到4的參與者。
我想我需要在第二行代碼中添加一個ifelse陳述句,說如果該參與者沒有4,那么第一次試驗就寫0,然后對于任何其他試驗寫NA。
我被卡住了,不知道如何寫下這部分陳述句,如果有任何建議,我將非常感激,謝謝你
uj5u.com熱心網友回復:library(tidyverse)
資料<-。
tibble::tribble()
~Participant, ~TrialNumber。 ~Correct, ~Count,
118,/span> 1。 1, 1, 1,
118,/span> 2。 1, 2,
118,/span> 3。 1, 3,
118,/span> 4。 1, 4,
118,/span> 5。 1, 5,
120,/span> 1。 1, 1, 1,
120, 2, 0, 0,
120,/span> 3。 0, 0,
120,/span> 4。 1, 1,
120,/span> 5。 1, 2,
121,/span> 1。 1, 1, 1,
121,/span> 2。 1, 2,
121,/span> 3。 1, 3,
121,/span> 4。 1, 4,
121,/span> 5。 0, 0
)
資料 %>%
group_by(Participant) %>%
mutate()
has_four = 4 %in% Count
) %>%
distinct(has_four) %>%
轉化()
參與者,
性能 = ifelse(has_four, 4, 0)
)
#> # A tibble: 3 × 2
#> # 團體。 參與者[3]
#> 參與者表現#> <dbl> <dbl>
#> 1 118 4
#> 2 120 0
#> 3 121 4
創建于2021-09-16,由reprex軟體包(v2.0.1)
uj5u.com熱心網友回復:
這里是另一種tidyverse方法。在按Participant分組后,使用summarise并指定新的列包括TrialNumber,其中Count是4。如果沒有一個試驗有4(使用any),那么包括0。這將假設你只有一個Count等于4的試驗的任何參與者。
library(tidyverse)
df %>%。
group_by(Participant) %>%
summarise(Performance = ifelse(any(Count == 4), TrialNumber[Count == 4] 。 0))
輸出
參與者表現
<int> <dbl>
1 118 4
2 120 0
3 121 4
資料
df < -結構(list(參與者= c(118L。 118L, 118L。 118L, 118L, 118L,
120L, 120L,。 120L, 120L。 121L, 121L, 121L, 121L, 121L),
TrialNumber = c(1L。 2L。 3L, 4L, 5L。 1L, 2L, 3L。 4L, 5L。 1L,
2L, 3L, 4L。 5L)。 正確 = c(1L。 1L, 1L, 1L。 1L, 1L。 0L,
0L,/span> 1L。 1L, 1L, 1L, 1L, 1L。 0L)。 Count = c(1L。 2L, 3L。 4L, 4L,
5L, 1L。 0L, 0L。 1L, 2L, 1L。 2L, 3L, 4L。 0L))。 class = "data. frame",行。 names = c(NA,)
-15L))
uj5u.com熱心網友回復:
這里有一個基本的R方法。
data$Performance < - ifelse(data$Count == 4。 data$TrialNumber, 0)
aggregate(x = data$Performance。 通過= list(Participant =) operator">= data$Participant)。 FUN = sum)
#> Participant x
#> 1 118 4
#> 2 120 0
#> 3 121 4
uj5u.com熱心網友回復:
使用基礎R aggregate與if/else.
aggregate(Count~Participant, df。 函式(x) if(any(x == 4)) 4 else 0)
# 參與者人數
#1 118 4
#2 120 0
#3 121 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314471.html
標籤:
