我正在处理一个相对简单的问题,我不知道如何解决。让我们想象一下,我有以下数据框:
Book Word Rel.Freq
A art 0.56
A car 0.4
B car 0.58
B dog 0.32
C art 0.5
C car 0.48
C dog 0.35
所以,我希望只有一个数据帧,其值与列字相同。我需要一些功能来比较单词中的A,B和C值,并只提取共享的那些,这只是在所有"书籍中重复的那些"。我还需要一种方法来总结Rel。频率。值并根据书中的变量数获得均值。我想要一个看起来像这样的数据框:
word Mean.Rel.Freq
car 0.48
答案 0 :(得分:2)
这是使用tidyverse
套件包完成此任务的方法。
library(tidyverse)
# read in example data
df <- read_table("Book Word Rel.Freq
A art 0.56
A car 0.4
B car 0.58
B dog 0.32
C art 0.5
C car 0.48
C dog 0.35")
output <- df %>%
group_by(Word) %>%
summarize(
n_books = n(),
Mean.Rel.Freq = mean(Rel.Freq)
)
# remove (if desired) the words with too-few books.
output <- output %>%
filter(n_books < 3) # replace 3 with total number of books
答案 1 :(得分:2)
按“Word”分组后,我们filter
那些'Word',其中'Book'的不同元素的数量等于整个数据集中'Book'的不同元素,summarise
'Rel.Freq'取其mean
library(tidyverse)
df1 %>%
group_by(Word) %>%
filter(n_distinct(Book) == n_distinct(.$Book)) %>%
summarise(Mean.Rel.Freq = mean(Rel.Freq))
# A tibble: 1 x 2
# Word Mean.Rel.Freq
# <chr> <dbl>
#1 car 0.487
答案 2 :(得分:2)
使用aggregate
和Reduce
+ intersect
的基础R版本来查找一致的Word
:
aggregate(
Rel.Freq ~ Word, data=dat, FUN=mean,
subset = Word %in% Reduce(intersect, split(Word, Book))
)
# Word Rel.Freq
#1 car 0.4866667