【发布时间】:2018-04-04 17:12:40
【问题描述】:
我想知道如何最有效地将数据框中的所有值与特定条件值进行比较。在这个例子中:
在这个例子中:
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
我确信一定有一个简单的答案,但不容易找到。你能帮忙吗?
【问题讨论】:
-
子集然后加入似乎是最简单的答案。