计算 r 中的文本数量
count the number of text in r
我有一个像 df
这样的数据集。我想计算每个 bars_by_foo
的文本出现次数并创建 my.column
。非常感谢。
data <- data.frame(foo=c(1, 1, 1, 2, 2, 3, 3, 3), bar=c('a', 'a', 'b', 'a', 'b', 'b', 'c', 'd'))
data
agg <- aggregate(bar~foo, data = data, paste0, collapse="")
df <- merge(data, agg, by = "foo", all = T)
colnames(df) <- c(colnames(data), "bars_by_foo") # optional
df
预期答案
foo bar bars_by_foo my.column
1 a aab a(2), b(1)
1 a aab a(2), b(1)
1 b aab a(2), b(1)
2 a ab a(1), b(1)
2 b ab a(1), b(1)
3 b bcd b(1), c(1), d(1)
3 c bcd b(1), c(1), d(1)
3 d bcd b(1), c(1), d(1)
我们可以贴一个群
add_count
- 根据 'foo'、'bar' 列创建频率列
- 按 'foo' - 'bars_by_foo'
分组后将 'bar' 个元素粘贴在一起
- 使用
sprintf
将'bar'、'n'列格式化为一个字符串,得到unique
元素和paste
与toString
library(dplyr)
library(stringr)
data %>%
add_count(foo, bar) %>%
group_by(foo) %>%
mutate(bars_by_foo = str_c(bar, collapse=""),
my.column = toString(unique(sprintf('%s(%d)', bar, n)))) %>%
ungroup
-输出
# A tibble: 8 x 5
foo bar n bars_by_foo my.column
<dbl> <chr> <int> <chr> <chr>
1 1 a 2 aab a(2), b(1)
2 1 a 2 aab a(2), b(1)
3 1 b 1 aab a(2), b(1)
4 2 a 1 ab a(1), b(1)
5 2 b 1 ab a(1), b(1)
6 3 b 1 bcd b(1), c(1), d(1)
7 3 c 1 bcd b(1), c(1), d(1)
8 3 d 1 bcd b(1), c(1), d(1)
我有一个像 df
这样的数据集。我想计算每个 bars_by_foo
的文本出现次数并创建 my.column
。非常感谢。
data <- data.frame(foo=c(1, 1, 1, 2, 2, 3, 3, 3), bar=c('a', 'a', 'b', 'a', 'b', 'b', 'c', 'd'))
data
agg <- aggregate(bar~foo, data = data, paste0, collapse="")
df <- merge(data, agg, by = "foo", all = T)
colnames(df) <- c(colnames(data), "bars_by_foo") # optional
df
预期答案
foo bar bars_by_foo my.column
1 a aab a(2), b(1)
1 a aab a(2), b(1)
1 b aab a(2), b(1)
2 a ab a(1), b(1)
2 b ab a(1), b(1)
3 b bcd b(1), c(1), d(1)
3 c bcd b(1), c(1), d(1)
3 d bcd b(1), c(1), d(1)
我们可以贴一个群
add_count
- 根据 'foo'、'bar' 列创建频率列- 按 'foo' - 'bars_by_foo' 分组后将 'bar' 个元素粘贴在一起
- 使用
sprintf
将'bar'、'n'列格式化为一个字符串,得到unique
元素和paste
与toString
library(dplyr)
library(stringr)
data %>%
add_count(foo, bar) %>%
group_by(foo) %>%
mutate(bars_by_foo = str_c(bar, collapse=""),
my.column = toString(unique(sprintf('%s(%d)', bar, n)))) %>%
ungroup
-输出
# A tibble: 8 x 5
foo bar n bars_by_foo my.column
<dbl> <chr> <int> <chr> <chr>
1 1 a 2 aab a(2), b(1)
2 1 a 2 aab a(2), b(1)
3 1 b 1 aab a(2), b(1)
4 2 a 1 ab a(1), b(1)
5 2 b 1 ab a(1), b(1)
6 3 b 1 bcd b(1), c(1), d(1)
7 3 c 1 bcd b(1), c(1), d(1)
8 3 d 1 bcd b(1), c(1), d(1)