簡體   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