【问题标题】:Extracting a list of variables from one dataframe and applying it to another dataframe从一个数据帧中提取变量列表并将其应用于另一个数据帧
【发布时间】:2021-03-23 12:20:02
【问题描述】:

我在 R 中有一个数据框,包含几个二进制变量

df1 <- cbind(w = c(1,0,0,0,0), x = c(1,1,1,1,0), y = c(0,0,0,1,1), z = (c(0,0,0,0,1)))

> df1

#     w x y z
#[1,] 1 1 0 0
#[2,] 0 1 0 0
#[3,] 0 1 0 0
#[4,] 0 1 1 0
#[5,] 0 0 1 1

还有另一个数据框 (df2),其中每一行都包含来自 df1 的指定变量对

df2 <- cbind (var1 = c("w","y","y"), var2 = c("z","x","w"))
> df2

#    var1 var2
#[1,] "w"  "z" 
#[2,] "y"  "x" 
#[3,] "y"  "w" 

我想获取 df2 行中的所有组合(“w_z”、“y_x”和“y_w”,并将它们作为列添加到 df1。 每个新创建的“组合”列中的值应指示特定行是否在为该列指定的一个或另一个变量中包含“1”。例如,列 w_z 应指示该行是否在“w”或“z”中具有“1”。生成的数据框应该类似于

> df1_New

#     w x y z w_z y_x y_w
#[1,] 1 1 0 0   1   1   1
#[2,] 0 1 0 0   0   1   0
#[3,] 0 1 0 0   0   1   0
#[4,] 0 1 1 0   0   1   1
#[5,] 0 0 1 1   1   1   1

非常感谢任何帮助!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    试试这个

    cbind(df1,`colnames<-`(+apply(df2, 1, function(k) rowSums(df1[,k])>0),do.call(paste,c(as.data.frame(df2),sep = "_"))))
    

    给了

         w x y z w_z y_x y_w
    [1,] 1 1 0 0   1   1   1
    [2,] 0 1 0 0   0   1   0
    [3,] 0 1 0 0   0   1   0
    [4,] 0 1 1 0   0   1   1
    [5,] 0 0 1 1   1   1   1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多