我正在尝试向 R 中的数据帧添加一列,该列提供一列中唯一值在二进制列中值为 1 的次数计数。这些数据来自一项研究,该研究涉及参与者聆听句子并标记听起来高音调的音节。以下是数据示例,其中包含
syll
中的十个音节和 id
中的三个参与者。列 id
和 syll
需要是分类的,并且 high
需要是二进制/数字。
id syll high
1 1 0
1 2 0
1 3 1
1 4 0
1 5 0
1 6 0
1 7 0
1 8 0
1 9 0
1 10 0
2 1 0
2 2 1
2 3 1
2 4 0
2 5 1
2 6 1
2 7 0
2 8 0
2 9 0
2 10 0
3 1 0
3 2 1
3 3 0
3 4 0
3 5 0
3 6 0
3 7 0
3 8 0
3 9 0
3 10 0
我想做的是添加一列
high_count
来计算每个音节被认为是高音调的次数。例如,对于音节 1(在 syll
中),三个参与者(在 id
中)都没有将其标记为高音(在 high
中),因此新列中的值将为 0。 2,两个参与者(#2 和 #3)将其标记为高音调,因此新列中的值将为 2。这些 high_count
值需要针对出现唯一音节的每一行进行迭代(即,每个参与者一次)。它应该是这样的:
id syll high high_count
1 1 0 0
1 2 0 2
1 3 1 2
1 4 0 0
1 5 0 1
1 6 0 1
1 7 0 0
1 8 0 0
1 9 0 0
1 10 0 0
2 1 0 0
2 2 1 2
2 3 1 2
2 4 0 0
2 5 1 1
2 6 1 1
2 7 0 0
2 8 0 0
2 9 0 0
2 10 0 0
3 1 0 0
3 2 1 2
3 3 0 2
3 4 0 0
3 5 0 1
3 6 0 1
3 7 0 0
3 8 0 0
3 9 0 0
我看过其他帖子(这里和这里),但它们似乎并没有完全解决我的情况。
使用此代码:
high_counts <- df %>% count(syll, high=factor(high))
我能够让 R 总结每个音节的 0 和 1 计数:
syll high n
1 1 0 30
2 1 1 8
3 2 0 15
4 2 1 23
5 3 0 29
6 3 1 9
7 4 0 36
8 4 1 2
9 5 0 33
10 5 1 5
... etc.
但我无法将其放入数据框中的新列中。我也只想保留“1”值。
如果我可以澄清任何事情,请告诉我。
列 id 和 syll 需要是分类的,并且 high 需要是二进制/数字。
library(tidyverse)
df <- df |> mutate(across(-high, as.factor),
high = as.logical(high))
要获得 high_count:
mutate(df, high_count = sum(high), .by = syll)
要获取 high_counts 作为一列:
mutate(df, n = n(), .by = c(syll, high))
仅筛选 high == 1(即 TRUE)的值:
filter(df, high)