如何将三列转换为单列

时间:2013-04-19 07:31:04

标签: r

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

   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  

我希望根据某些原则将前三个colums组合成一个基础:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

as.numeric(factor(do.call(paste, dat[1:3])))