2013-08-03 63 views
0

我有哑问题要问。我正在尝试将两列与因素组合成一个列。结合因素列(级别:0 =因为不; 1 =是)

水平(0和1)如同否和是。

所以,如果我结合1和1它应该给我1; 0和1为1等等

感谢任何信息... 穆拉利

> sessionInfo() 
R version 2.15.1 (2012-06-22) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

> head(testmerge$glucosystemic,10) 
[1] 0 0 0 0 0 0 0 0 0 0 
Levels: 0 1 glucosystemic 
> head(testmerge$glucolocal,10) 
[1] 0 0 0 0 0 1 1 0 0 1 
Levels: 0 1 glucolocal 
> str(testmerge$glucosystemic) 
Factor w/ 3 levels "0","1","glucosystemic": 1 1 1 1 1 1 1 1 1 1 ... 
> str(testmerge$glucolocal) 
Factor w/ 3 levels "0","1","glucolocal": 1 1 1 1 1 2 2 1 1 2 ... 

这解决了问题

### from stackflow help 
glucomerge <- function(vec1, vec2) {as.numeric(as.numeric(vec1) + as.numeric(vec2) > 2)} 
testmerge$glucoco <- glucomerge(testmerge$glucosystemic,testmerge$glucolocal) 

感谢

+1

你的“etc”并不完全清楚,但它看起来像OR运算符。你可否确认? –

+0

所以如果我结合一列(0,1)与另一个(1,1)。它应该分别给(1,1)。 –

+0

你的因素有三个层次,不仅是“0”和“1”。 “glucosystemic”和“glucolocal”这些关卡会发生什么? –

回答

0

假设你的数据是testmerge ,那么您可以使用interaction

testmerge$col<-with(testmerge, interaction (glucosystemic,glucolocal))

更新:您可以使用as.numeric分配水平。

testmerge$col<-with(testmerge, as.numeric(interaction (glucosystemic,glucolocal))) 
+0

非常感谢,但是当我尝试与交互作用时,第三列是与列 0和1的值给出了0.1 –

+0

我已经更新了现在。 – Metrics

1

只需使用以下命令:

FactorOR(testmerge[, c("glucosystemic", "glucolocal")]) 
# [1] 0 0 0 0 0 1 1 0 0 1 


# Where the function is defined as: 
FactorOR <- function(TwoColDF) { 
    as.numeric(as.numeric(TwoColDF[,1]) + as.numeric(TwoColDF[,2]) > 2) 
} 
+0

很高兴帮助。不过,我更喜欢@亨利克的解决方案 –

1

或:

x3 <- ifelse(x1 == 1 | x2 == 1, 1, 0) 

as.numeric(as.numeric(vec1) + as.numeric(vec2) > 2) 

您可以在一个不错的功能,你只需运行它包