[英]Compare all rows to one specific row in r dataframe
我想知道如何最有效地將數據框中的所有值與特定條件值進行比較。 在此示例中:
在此示例中:
id <- c("a","a","b","b")
t <- c(2000,2018,2000,2018)
value <- c(10,20,5,30)
test0 <- data.frame(id,value,t,row.names = paste0(id,"_",t))
test <- test0
這使:
id value t
a_2000 a 10 2000
a_2018 a 20 2018
b_2000 b 5 2000
b_2018 b 30 2018
我想將值與另一個id或另一個t甚至行名進行比較。
到目前為止,我發現的最好方法是創建第二個數據框,僅包含id
的數據,然后將其加入該列以使用它。
在這種情況下,示例為:
tmp <- test0 %>%
subset(id =="a") %>%
select(value,t) %>%
rename(ref=value)
test %>%
left_join(tmp,by="t") %>%
mutate(vsRef = value/ref)
這使:
id value t ref vsRef
1 a 10 2000 10 1.0
2 a 20 2018 20 1.0
3 b 5 2000 10 0.5
4 b 30 2018 20 1.5
我相信肯定有一個簡單的答案,但是很難找到答案。 你能幫忙嗎?
終於找到了一種簡單的方法(當我最終決定寫這篇文章時!):
test0 %>%
ddply(.(t),mutate,vsRef=value/value[id=="a"])
id value t vsRef
1 a 10 2000 1.0
2 b 5 2000 0.5
3 a 20 2018 1.0
4 b 30 2018 1.5
test0 %>%
ddply(.(id),mutate,vsRef=value/value[t==2000])
id value t vsRef
1 a 10 2000 1
2 a 20 2018 2
3 b 5 2000 1
4 b 30 2018 6
test0 %>%
mutate(vsRef=value/value[rownames(test0)=="a_2000"])
id value t vsRef
1 a 10 2000 1.0
2 a 20 2018 2.0
3 b 5 2000 0.5
4 b 30 2018 3.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.