我正在嘗試用另一個資料框中的數值替換資料框中的字串值。讓我創建一個示例:
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 中出現的值并用它們的值替換它們。最后,我必須達到每個時間段的中位數才能完成任務。
有任何想法嗎?
uj5u.com熱心網友回復:
使用整潔的方法
library(tidyverse)
df1 %>%
mutate(Words = strsplit(df1$Words, " ")) %>%
unnest(Words) %>%
inner_join(df2, by="Words") %>%
group_by(Time) %>%
summarize(Score = median(Points))
使用資料表
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446338.html
下一篇:在python回圈中獲取url
