向 R 中的数据帧添加一列,用于计算另一列中每个唯一值的二进制观测值的数量

问题描述 投票:0回答:1

我正在尝试向 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”值。

如果我可以澄清任何事情,请告诉我。

r rstudio
1个回答
0
投票

列 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)
© www.soinside.com 2019 - 2024. All rights reserved.