【发布时间】:2020-06-21 10:19:54
【问题描述】:
假设我有以下字符串:
a <- c("a", "b", "c", "b", "a", "a", "e")
b <- table(a)
b 给出了 a 中每个元素的频率。如何创建一个包含两列的数据框,第一列是 a,第二列是每个元素的频率?
输出应如下所示:
f <- c(3, 2, 1, 2, 3, 3, 1)
output <- data.frame(a,f)
非常感谢您!
【问题讨论】:
假设我有以下字符串:
a <- c("a", "b", "c", "b", "a", "a", "e")
b <- table(a)
b 给出了 a 中每个元素的频率。如何创建一个包含两列的数据框,第一列是 a,第二列是每个元素的频率?
输出应如下所示:
f <- c(3, 2, 1, 2, 3, 3, 1)
output <- data.frame(a,f)
非常感谢您!
【问题讨论】:
我们可以使用add_count创建一个新列
library(tibble)
library(dplyr)
tibble(a) %>%
add_count(a)
或者在base R 和ave
data.frame(a, freq = ave(seq_along(a), a, FUN = length))
或者如果它需要来自'b',则与'b'的名称和向量'a'进行匹配以扩展table输出,然后将table对象转换为data.frame as.data.frame
as.data.frame(b[a])
# a Freq
#1 a 3
#2 b 2
#3 c 1
#4 b 2
#5 a 3
#6 a 3
#7 e 1
【讨论】:
使用合并:
merge(as.data.frame(a), as.data.frame(table(a)))
# a Freq
#1 a 3
#2 a 3
#3 a 3
#4 b 2
#5 b 2
#6 c 1
#7 e 1
【讨论】: