如何解决确定一个值是否与之前匹配的组中的 id 匹配
我有一个数据框,其中包含按站点和 ID 分组的数据。我想创建一个带有逻辑值的新列,该列指示每个站点内的 id 是否与前一行中的角度匹配。
other.dat <- c(1:12)
site <- c(rep(1,6),rep(2,6))
id <- c(1.1,1.2,1.3,1.1,2.1,2.2,2.3,2.3)
angle <- c(65,250,150,65,240,345,205,100)
data.frame(other.dat,site,id,angle)
other.dat site id angle
1 1 1 1.1 65
2 2 1 1.2 250
3 3 1 1.3 150
4 4 1 1.1 65
5 5 1 1.2 250
6 6 1 1.3 150
7 7 2 2.1 0
8 8 2 2.2 240
9 9 2 2.3 150
10 10 2 2.1 345
11 11 2 2.2 205
12 12 2 2.3 100
与上一个问题中给出的示例不同 (Identify if a value is repeated or not by groups in R),角度不需要是站点唯一的逻辑变量为 TRUE 并且第一个唯一 id 将始终为 TRUE。例如:
other.dat <- c(1:12)
site <- c(rep(1,100)
same.angle <- c(T,T,F,F)
data.frame(other.dat,angle,same.angle)
other.dat site id angle same.angle
1 1 1 1.1 65 TRUE
2 2 1 1.2 250 TRUE
3 3 1 1.3 150 TRUE
4 4 1 1.1 65 TRUE
5 5 1 1.2 250 TRUE
6 6 1 1.3 150 TRUE
7 7 2 2.1 0 TRUE
8 8 2 2.2 240 TRUE
9 9 2 2.3 150 TRUE
10 10 2 2.1 345 FALSE
11 11 2 2.2 205 FALSE
12 12 2 2.3 100 FALSE
我曾尝试使用 df <- within(df,same.angle <- as.logical(angle,FUN = function(x) length(unique(x))==1)))
,但由于我还不明白的原因,只有第 7 行返回为“FALSE”。
预先感谢您的帮助!
解决方法
试试这个。您可以按所需变量分组,然后使用 lag()
复制行比较,然后比较以达到预期输出:
library(dplyr)
#Code
new <- df %>% group_by(site,id) %>%
mutate(Var=lag(angle),Same.angle=ifelse(is.na(Var),T,ifelse(angle==Var,F))) %>%
select(-Var)
输出:
# A tibble: 12 x 5
# Groups: site,id [6]
other.dat site id angle Same.angle
<int> <dbl> <dbl> <dbl> <lgl>
1 1 1 1.1 65 TRUE
2 2 1 1.2 250 TRUE
3 3 1 1.3 150 TRUE
4 4 1 1.1 65 TRUE
5 5 1 1.2 250 TRUE
6 6 1 1.3 150 TRUE
7 7 2 2.1 0 TRUE
8 8 2 2.2 240 TRUE
9 9 2 2.3 150 TRUE
10 10 2 2.1 345 FALSE
11 11 2 2.2 205 FALSE
12 12 2 2.3 100 FALSE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。