r - 如何在 R 中为多个维度构建二进制 data.frame?

标签 r dataframe binary-data

我有一个包含三个因子的数据框,其中两个是二进制的,第三个是整数:

       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/

相关文章:

r - "group by"类似于 R 中的命令,以 min 作为聚合函数和多列

python - 如何使用 pyodbcexecutemany() 处理主键约束违规

python - Pandas 根据日期时间融化数据框并填充所有值 NaN

c++ - C/C++ : is it possible to pass binary data through the console?

java - 如何配置 Jackson 不序列化字节数组?

返回列表中向量的特定元素

r - 通过特定标记选择表中的行

r - 如何将(多页)pdf 添加到 rmarkdown?

python - 在一个数据框中查找符号并将其替换为跨数千列的另一个数据框中的值

c# - Ascii 范围考虑二进制文件?