1

我有一个如下所示的数据集:

   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15  
1   1  1  1  1  1  1  1  1  1   1   1   1   1   1   1  
2   1  1  1  1  1  1  1 -1 -1  -1  -1  -1  -1  -1  -1  
3   1  1  1 -1 -1 -1 -1  1  1   1   1  -1  -1  -1  -1 
4   1  1  1 -1 -1 -1 -1 -1 -1  -1  -1   1   1   1   1  
5   1 -1 -1  1  1 -1 -1  1  1  -1  -1   1   1  -1  -1  
6   1 -1 -1  1  1 -1 -1 -1 -1   1   1  -1  -1   1   1  
7   1 -1 -1 -1 -1  1  1  1  1  -1  -1  -1  -1   1   1  
8   1 -1 -1 -1 -1  1  1 -1 -1   1   1   1   1  -1  -1  
9  -1  1 -1  1 -1  1 -1  1 -1   1  -1   1  -1   1  -1  
10 -1  1 -1  1 -1  1 -1 -1  1  -1   1  -1   1  -1   1  
11 -1  1 -1 -1  1 -1  1  1 -1   1  -1  -1   1  -1   1  
12 -1  1 -1 -1  1 -1  1 -1  1  -1   1   1  -1   1  -1  
13 -1 -1  1  1 -1 -1  1  1 -1  -1   1   1  -1  -1   1 
14 -1 -1  1  1 -1 -1  1 -1  1   1  -1  -1   1   1  -1  
15 -1 -1  1 -1  1  1 -1  1 -1  -1   1  -1   1   1  -1  
16 -1 -1  1 -1  1  1 -1 -1  1   1  -1   1  -1  -1   1  

我想根据某些原则将前三个列组合成一个基础:

 1  1  1 → 1  
 1 -1 -1 → 2  
-1  1 -1 → 3  
-1 -1  1 → 4 

这是我第一次使用 R 语言。我不知道该怎么做。有没有人有一些简单的代码来做到这一点?提前致谢!

4

2 回答 2

4

我假装你的数据框被称为df......

test <- apply(df[1:3], 1, paste, collapse="") # this will merge the numbers of the first 3
                                         # for each row

result <- sapply(test, switch, '111' = 1, '1-11' = 2, '-11-1' = 3, '-1-11' = 4)

如果result是列表使用unlist

于 2013-04-19T07:54:11.683 回答
2

鉴于前三列中有 8 种可能的值组合,您可能需要更具体地说明如何对组合结果进行编码。也就是说,这将提供从这些值到单个数字的映射。假设您的数据集是一个名为的数据框dat

as.numeric(factor(do.call(paste, dat[1:3])))
于 2013-04-19T07:52:44.113 回答