首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从R中的一组因子创建一个组合ID号

从R中的一组因子创建一个组合ID号
EN

Stack Overflow用户
提问于 2018-05-31 17:52:10
回答 1查看 42关注 0票数 0

有没有人可以帮我计算一个新的变量,这个变量将会从某些因子中计算出不同的组合?

假设在主题因素(ABCD)中有4个,对于10个主题中的任何一个,每个组合都有8次重复,下面是我的数据表示其实际结构的方式:

代码语言:javascript
复制
library(AlgDesign) #for generating a factorial design)
df <-gen.factorial(c(2,2,2,2,8,10), factors = "all", 
                      varNames = c("A", "B", "C", "D", "replication", "Subject"))
> head(df)
  A B C D replication Subject
1 1 1 1 1           1       1
2 2 1 1 1           1       1
3 1 2 1 1           1       1
4 2 2 1 1           1       1
5 1 1 2 1           1       1
6 2 1 2 1           1       1
> tail(df)
     A B C D replication Subject
1275 1 2 1 2           8      10
1276 2 2 1 2           8      10
1277 1 1 2 2           8      10
1278 2 1 2 2           8      10
1279 1 2 2 2           8      10
1280 2 2 2 2           8      10

在本例中,生成replication只是为了强制执行8个rep,但它并不对组合本身进行“编码”。

我的原始数据只有变量ABCDSubject,我希望以这样一种方式计算 replication,即它具有不同的值,但对于D16、D17、D18、D19的每个组合,都有不同的值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 19:28:34

代码语言:javascript
复制
library(AlgDesign) 
library(dplyr)

df <-gen.factorial(c(2,2,2,2,8,10), factors = "all", 
                   varNames = c("A", "B", "C", "D", "replication", "Subject"))

df %>%
  rowwise() %>%                                             # for each row
  mutate(factors = paste0(c(A,B,C,D), collapse = "_")) %>%  # create a combination of your factors
  ungroup() %>%                                             # forget the row grouping
  mutate(replication_upd = as.numeric(factor(factors)))     # create a number based on the combination you have

# # A tibble: 1,280 x 8
#   A     B     C     D     replication Subject factors replication_upd
#   <fct> <fct> <fct> <fct> <fct>       <fct>   <chr>             <dbl>
# 1 1     1     1     1     1           1       1_1_1_1               1
# 2 2     1     1     1     1           1       2_1_1_1               9
# 3 1     2     1     1     1           1       1_2_1_1               5
# 4 2     2     1     1     1           1       2_2_1_1              13
# 5 1     1     2     1     1           1       1_1_2_1               3
# 6 2     1     2     1     1           1       2_1_2_1              11
# 7 1     2     2     1     1           1       1_2_2_1               7
# 8 2     2     2     1     1           1       2_2_2_1              15
# 9 1     1     1     2     1           1       1_1_1_2               2
#10 2     1     1     2     1           1       2_1_1_2              10
# # ... with 1,270 more rows

您可以删除任何不必要的变量。我把它们放在那里,这样你就可以看到这个过程是如何工作的。

另一种选择是这样

代码语言:javascript
复制
# create a look up table based on unique combinations and assign them a number
df %>% distinct(A,B,C,D) %>% mutate(replication_upd = row_number()) -> look_up

# join back to original dataset
df %>% inner_join(look_up, by=c("A","B","C","D")) %>% tbl_df()

# # A tibble: 1,280 x 7
#   A     B     C     D     replication Subject replication_upd
#   <fct> <fct> <fct> <fct> <fct>       <fct>             <int>
# 1 1     1     1     1     1           1                     1
# 2 2     1     1     1     1           1                     2
# 3 1     2     1     1     1           1                     3
# 4 2     2     1     1     1           1                     4
# 5 1     1     2     1     1           1                     5
# 6 2     1     2     1     1           1                     6
# 7 1     2     2     1     1           1                     7
# 8 2     2     2     1     1           1                     8
# 9 1     1     1     2     1           1                     9
# 10 2     1     1     2     1           1                    10
# # ... with 1,270 more rows

请注意,第一种方法根据我们创建的新变量(即阶数A、B、C、D)来挑选数字,第二种方法使用数据集的初始顺序来挑选每个唯一组合的数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50621457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档