【问题标题】:Combine two sequences of data合并两个数据序列
【发布时间】:2021-11-26 12:59:30
【问题描述】:

我有两个数据序列(每个序列中有五个变量),我想使用这个规则将它们相应地组合成一个:

variable sequence 1   variable sequence 2     variable in combined sequence     
        0                      0                            1
        0                      1                            2
        1                      0                            3
        1                      1                            4

以下是一些示例数据:

set.seed(145)
mm <- matrix(0, 5, 10)
df <- data.frame(apply(mm, c(1,2), function(x) sample(c(0,1),1)))
colnames(df) <- c("s1_1", "s1_2", "s1_3", "s1_4", "s1_5", "s2_1", "s2_2", "s2_3", "s2_4", "s2_5")
> df
  s1_1 s1_2 s1_3 s1_4 s1_5 s2_1 s2_2 s2_3 s2_4 s2_5
1    1    0    0    0    0    0    1    1    0    0
2    1    1    1    0    1    1    0    0    0    0
3    1    1    0    0    0    1    1    0    1    1
4    0    0    1    0    1    1    0    1    0    1
5    0    1    0    0    1    0    0    1    1    0

这里s1_1代表序列1中的变量1,s2_1代表序列2中的变量2,以此类推。对于此示例,s1_1=1 和 s2_1=0,组合序列中的变量 1 将被编码为 3。如何在 R 中执行此操作?

【问题讨论】:

    标签: r combinations sequence data-manipulation data-cleaning


    【解决方案1】:

    这是一种方法-

    return_value <- function(x, y) {
      dplyr::case_when(x == 0 & y == 0 ~ 1, 
                       x == 0 & y == 1 ~ 2, 
                       x == 1 & y == 0 ~ 3, 
                       x == 1 & y == 1 ~ 4)
    }
    sapply(split.default(df, sub('.*_', '', names(df))), function(x) 
           return_value(x[[1]], x[[2]]))
    
    #     1 2 3 4 5
    #[1,] 3 2 2 1 1
    #[2,] 4 3 3 1 3
    #[3,] 4 4 1 2 2
    #[4,] 2 1 4 1 4
    #[5,] 1 3 2 2 3 
    

    split.default 按序列拆分数据,并使用sapply 应用函数return_value 来比较每个数据帧中的两列。

    【讨论】:

    • 感谢@Ronak Shah 的解决方案!
    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2020-10-16
    • 2019-05-01
    相关资源
    最近更新 更多