我有一个数据帧,其中有三个因素,其中两个是二进制,第三个是整数:

       DATA   YEAR1   YEAR2   REGION1   REGION2
OBS1   X      1        0      1         0
OBS2   Y      1        0      0         1
OBS3   Z      0        1      1         0

等等

现在我想将其转换为这样的东西
       YEAR1_REGION1   YEAR1_REGION2   YEAR2_REGION1   YEAR2_REGION2
OBS1   X               0               0               0
OBS2   0               Y               0               0
OBS3   0               0               Z               0

基本的矩阵乘法不是我想要的。我想找到一种整齐的方法来自动重命名这些列。我的实际数据具有20 * 8 * 6观测值的三个因子维度,因此最终总共将有960列。

最佳答案

这是另一种基于outer的方法,类似于@Roland答案。

year <- grep("YEAR", names(DF), value = TRUE)
region <- grep("REGION", names(DF), value = TRUE)
data <- as.character(DF$DATA)

df <- outer(year, region, function(x, y) DF[,x] * DF[,y])
colnames(df) <- outer(year, region, paste, sep = "_")
df <- as.data.frame(df)

for (i in seq_len(ncol(df)))
    df[as.logical(df[,i]), i] <- data[as.logical(df[,i])]

df
##      YEAR1_REGION1 YEAR2_REGION1 YEAR1_REGION2 YEAR2_REGION2
## OBS1             X             0             0             0
## OBS2             0             0             Y             0
## OBS3             0             Z             0             0

关于r - 如何在R中为多个维度构建二进制data.frame?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20949398/

10-12 21:48