如何有条件地使用其他变量的值和顺序来创建类别

问题描述 投票:1回答:1

我希望得到任何帮助创造一个可以让我创建使用一组其他变量值的顺序一个变量的类别。

具体而言,我想一个函数:

  1. 创建E1该变量variablefirst的值的每个组合,并且A出现在数据集中的B时间的变量的类别ID
  2. 创建E2该变量variablesecond的值的每个组合,并且A出现在数据集中的B时间的变量的类别ID
  3. 创建E3该变量variablethird的值的每个组合,并且A出现在数据集中的B时间的变量的类别ID
  4. 创建En该变量variablenth的值的每个组合,并且A出现在数据集中的B时间的变量的类别ID

#样本数据:

rowdT<-structure(list(A = c("a1", "a2", "a1", "a1", "a2", "a1", "a1", 
            "a2", "a1"), B = c("b2", "b2", "b2", "b1", "b2", "b2", "b1", 
            "b2", "b1"), ID = c("3", "4", "3", "1", "4", "3", "1", "4", "1"
            ), E = c(0.621142094943352, 0.742109450696123, 0.39439152996948, 
            0.40694392882818, 0.779607277916503, 0.550579323666347, 0.352622183880119, 
            0.690660491345867, 0.23378944873769)), class = c("data.table", 
            "data.frame"), row.names = c(NA, -9L))     
sampleDT <- melt(rowdT, id.vars = c("A", "B", "ID"))

#输入数据:

    A  B  ID variable    value
1: a1 b2  3        E 0.6211421
2: a2 b2  4        E 0.7421095
3: a1 b2  3        E 0.3943915
4: a1 b1  1        E 0.4069439
5: a2 b2  4        E 0.7796073
6: a1 b2  3        E 0.5505793
7: a1 b1  1        E 0.3526222
8: a2 b2  4        E 0.6906605
9: a1 b1  1        E 0.2337894

#expected输出:

    A  B  ID variable    value
4: a1 b1  1        E1 0.4069439
1: a1 b2  3        E1 0.6211421
2: a2 b2  4        E1 0.7421095
7: a1 b1  1        E2 0.3526222
3: a1 b2  3        E2 0.3943915
5: a2 b2  4        E2 0.7796073
9: a1 b1  1        E3 0.2337894
6: a1 b2  3        E3 0.5505793
8: a2 b2  4        E3 0.6906605

在此先感谢您的帮助。

r function data.table reshape tidyr
1个回答
4
投票

首先你的变量转换为正确胁迫一个特征向量,然后用data.table

sampleDT$variable = as.character(sampleDT$variable)

sampleDT[, variable := paste(variable,1:.N,sep = ""), by = c("A", "B", "ID")]

这产生基于AB,和ID所观察到的组合的独特吻合。

这得到以下的输出:

    A  B ID variable     value
1: a1 b2  3       E1 0.6211421
2: a2 b2  4       E1 0.7421095
3: a1 b2  3       E2 0.3943915
4: a1 b1  1       E1 0.4069439
5: a2 b2  4       E2 0.7796073
6: a1 b2  3       E3 0.5505793
7: a1 b1  1       E2 0.3526222
8: a2 b2  4       E3 0.6906605
9: a1 b1  1       E3 0.2337894

这在必要时可以重新排序。

© www.soinside.com 2019 - 2024. All rights reserved.