簡體   English   中英

將所有行與R數據幀中的特定行進行比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM