用R中另一个Dataframe中的值替换Dataframe中的单词
Replacing words in Dataframe by values in another Dataframe in R
我正在尝试用另一个 Dataframe 中的数值替换 Dataframe 中的字符串值。让我创建一个示例:
df1 <- data.frame("Time" = seq(1, 3, 1),
"Words" = c("dog cat", "bird fish", "elephant shark turtle"))
这是我的主要数据框。这很简单:第一列指的是花费的时间,第二列显示在特定时间注册的每个单词。另一个数据框是:
df2 <- data.frame("Words" = c("turtle", "bird", "dog", "elephant", "cat", "shark", "fish"),
"Points" = seq(1, 7, 1))
这个Dataframe是指每个Word完成的Points。我的目标是计算每个时间段的点的 中位数 。例如,当 Time = 1 时,“dog”等于 3,“cat”等于 5,因此中位数将为 4.
我遇到了很多麻烦。第一件事是如何分隔字符串中的单词。然后,我想我必须创建一个循环来 在 df2 中搜索出现在 df1 中的值,并用它们的值 替换它们。最后,我必须达到每个时间段的中位数才能完成任务。
有什么想法吗?
使用整洁的方法
library(tidyverse)
df1 %>%
mutate(Words = strsplit(df1$Words, " ")) %>%
unnest(Words) %>%
inner_join(df2, by="Words") %>%
group_by(Time) %>%
summarize(Score = median(Points))
使用data.table
library(data.table)
setDT(df1)[,.(Words=strsplit(Words, " ")[[1]]),by=Time] %>%
.[setDT(df2), on=.(Words)] %>%
.[,(Score = median(Points)), by=Time]
输出:
Time Score
<dbl> <dbl>
1 1 4
2 2 4.5
3 3 4
我正在尝试用另一个 Dataframe 中的数值替换 Dataframe 中的字符串值。让我创建一个示例:
df1 <- data.frame("Time" = seq(1, 3, 1),
"Words" = c("dog cat", "bird fish", "elephant shark turtle"))
这是我的主要数据框。这很简单:第一列指的是花费的时间,第二列显示在特定时间注册的每个单词。另一个数据框是:
df2 <- data.frame("Words" = c("turtle", "bird", "dog", "elephant", "cat", "shark", "fish"),
"Points" = seq(1, 7, 1))
这个Dataframe是指每个Word完成的Points。我的目标是计算每个时间段的点的 中位数 。例如,当 Time = 1 时,“dog”等于 3,“cat”等于 5,因此中位数将为 4.
我遇到了很多麻烦。第一件事是如何分隔字符串中的单词。然后,我想我必须创建一个循环来 在 df2 中搜索出现在 df1 中的值,并用它们的值 替换它们。最后,我必须达到每个时间段的中位数才能完成任务。
有什么想法吗?
使用整洁的方法
library(tidyverse)
df1 %>%
mutate(Words = strsplit(df1$Words, " ")) %>%
unnest(Words) %>%
inner_join(df2, by="Words") %>%
group_by(Time) %>%
summarize(Score = median(Points))
使用data.table
library(data.table)
setDT(df1)[,.(Words=strsplit(Words, " ")[[1]]),by=Time] %>%
.[setDT(df2), on=.(Words)] %>%
.[,(Score = median(Points)), by=Time]
输出:
Time Score
<dbl> <dbl>
1 1 4
2 2 4.5
3 3 4