R:生成组内值不同的指标
我有一个数据框,其中每一行是一个观察值,我有两列:R:生成组内值不同的指标,r,R,我有一个数据框,其中每一行是一个观察值,我有两列: 观察的组成员 观察的结果 我正在尝试创建一个新变量outcome\u change,如果给定组中的所有观察值outcome不相同,则该变量的值为1,否则为0 下面的代码(dat)是我所拥有的数据的一个示例。同时,dat_out1显示了在没有NA值的情况下,我希望代码产生什么。dat_out2是相同的,只是它表明当组值中缺少值时,会产生相同的结果 当然,dplyr::group_by()在某种程度上可以做到这一点?我不知道如何在小组内进行这些
- 观察的
组成员
- 观察的
李>结果
outcome\u change
,如果给定组中的所有观察值outcome
不相同,则该变量的值为1,否则为0
下面的代码(dat
)是我所拥有的数据的一个示例。同时,dat_out1
显示了在没有NA
值的情况下,我希望代码产生什么。dat_out2
是相同的,只是它表明当组值中缺少值时,会产生相同的结果
当然,dplyr::group_by()在某种程度上可以做到这一点?我不知道如何在小组内进行这些比较
# Input (2 groups: 1 with identical values of outcome
# in the group (group a) and 1 with differing values of
# outcome in the group (group b)
dat <- data.frame(group = c("a","a","a","b","b","b"),
outcome = c(1,1,1,3,2,2))
# Output 1: add a variable for all observations belonging to
# a group where the outcome changed within each group
dat_out1 <- data.frame(group = c("a","a","a","b","b","b"),
outcome = c(1,1,1,3,2,2),
outcome_change = c(0,0,0,1,1,1))
# Output 2: same as Output 1, but able to ignore NA values
dat_out2 <- data.frame(group = c("a","a","a","b","b","b"),
outcome = c(1,1,NA,3,2,NA),
outcome_change = c(0,0,0,1,1,1))
#输入(2组:1组具有相同的结果值
#在组(a组)和1中,具有不同的
#组内结果(b组)
dat下面是一个例子:
library(tidyverse)
dat %>%
group_by(group) %>%
mutate(outcome_change = ifelse(length(unique(outcome[!is.na(outcome)])) > 1, 1, 0))
#output
# A tibble: 6 x 3
# Groups: group [2]
group outcome outcome_change
<fctr> <dbl> <dbl>
1 a 1 0
2 a 1 0
3 a 1 0
4 b 3 1
5 b 2 1
6 b 2 1
下面是一个例子:
library(tidyverse)
dat %>%
group_by(group) %>%
mutate(outcome_change = ifelse(length(unique(outcome[!is.na(outcome)])) > 1, 1, 0))
#output
# A tibble: 6 x 3
# Groups: group [2]
group outcome outcome_change
<fctr> <dbl> <dbl>
1 a 1 0
2 a 1 0
3 a 1 0
4 b 3 1
5 b 2 1
6 b 2 1
库(dplyr)
dat%
变异(结果变化=ifelse(最小值(结果,na.rm=TRUE)=最大值(结果,na.rm=TRUE),0,1))
库(dplyr)
dat%
变异(结果变化=ifelse(最小值(结果,na.rm=TRUE)=最大值(结果,na.rm=TRUE),0,1))
这里有一个使用数据的选项。表
library(data.table)
setDT(dat1)[, outcome_change := as.integer(uniqueN(outcome[!is.na(outcome)])>1), group]
dat1
# group outcome outcome_change
#1: a 1 0
#2: a 1 0
#3: a 1 0
#4: b 3 1
#5: b 2 1
#6: b 2 1
如果我们将其应用于“dat2”
dat2
# group outcome outcome_change2
#1: a 1 0
#2: a 1 0
#3: a NA 0
#4: b 3 1
#5: b 2 1
#6: b NA 1
这里有一个使用数据的选项。表
library(data.table)
setDT(dat1)[, outcome_change := as.integer(uniqueN(outcome[!is.na(outcome)])>1), group]
dat1
# group outcome outcome_change
#1: a 1 0
#2: a 1 0
#3: a 1 0
#4: b 3 1
#5: b 2 1
#6: b 2 1
如果我们将其应用于“dat2”
dat2
# group outcome outcome_change2
#1: a 1 0
#2: a 1 0
#3: a NA 0
#4: b 3 1
#5: b 2 1
#6: b NA 1
严格地说,当值缺失时,你无法知道结果是否相同。是的,我应该说“观察值”或非缺失值是相同的。严格地说,当值缺失时,你无法知道结果是否相同。是的,我应该说“观察值”或者,非缺失值是相同的。或者更短一些:output\u change=1*(min(output)==max(output))
。更好的是,将其作为逻辑值保留,这在上下文中是很自然的。很好的解决方案。不如上述方法透明。或者更短一些:output\u change=1*(min(output)==max(output))
。最好还是将其保留为逻辑值,这是上下文中的自然值。好的解决方案。比上面的值更不透明。这得到答案,因为它在所做的工作中最透明。如果DPRIR更多,我们可以将长度(唯一(结果[!is.na(结果)])>1
表达式简化为n\u distinct(outcome,na.rm=TRUE)>1
。这得到了答案,因为它所做的事情是最透明的。使用更多dplyr,我们可以将长度(唯一(outcome[!is.na(outcome)])>1
表达式简化为n_distinct(outcome,na.rm=TRUE)>1
。