繁体   English   中英

用 R 中另一个 Dataframe 中的值替换 Dataframe 中的单词

[英]Replacing words in Dataframe by values in another Dataframe in R

我正在尝试将Dataframe 中的字符串值替换为另一个中的数值 让我创建一个示例:

df1 <- data.frame("Time" = seq(1, 3, 1),
              "Words" = c("dog cat", "bird fish", "elephant shark turtle"))

这是我的主 Dataframe。它非常简单:第一列指的是花费的时间,第二列显示在该特定时间注册的每个单词。 另一个Dataframe是:

df2 <- data.frame("Words" = c("turtle", "bird", "dog", "elephant", "cat", "shark", "fish"),
              "Points" = seq(1, 7, 1))

这个Dataframe指的是每个Word完成的Points。 我的目标是计算每个时间段的点数的中位数 例如,当时间 = 1 时,“狗”等于 3 而“猫”等于 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]

Output:

   Time Score
  <dbl> <dbl>
1     1   4  
2     2   4.5
3     3   4  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM