对数据框中的列执行二进制函数

时间:2010-02-12 19:56:39

标签: r dataframe

说我有一个包含内容的数据框:

Trial Person 
1     John   
2     John   
3     John   
4     John
1     Bill 
2     Bill
3     Bill
4     Bill

我希望将其转换为

Trial Person Day
1     John   1
2     John   1
3     John   2
4     John   2
1     Bill   1
2     Bill   1
3     Bill   2
4     Bill   2

我很容易就能成功

Trial Person Day
1     John   TRUE
2     John   TRUE
3     John   FALSE
4     John   FALSE
1     Bill   TRUE
2     Bill   TRUE
3     Bill   FALSE
4     Bill   FALSE

d$day=d$trial<3但我怎样才能达到我的目的?

4 个答案:

答案 0 :(得分:1)

如果你想明确分配(并硬编码3的截止值),你可以使用

d$Day <- ifelse(d$trial<3, 1, 2)

这有点透明。否则,正如您所发现的,执行算术运算会将逻辑值转换为数字。您可以使用as.numericas.integer

自行完成
as.integer(FALSE)  #0
as.integer(TRUE)   #1

答案 1 :(得分:1)

获取数据:

x <- read.table(textConnection(
"Trial Person 
1     John   
2     John   
3     John   
4     John
1     Bill 
2     Bill
3     Bill
4     Bill"), header=TRUE)

我认为您当前的方法是正确的(请注意:您不需要as.numeric,因为在这种情况下添加时会自动转换):

(x$Trial >= 3) + 1

否则,这是用plyr做的一种方法。

library(plyr)
ddply(x, .(Person), transform, Day=rep(c(1,2), each=2))

答案 2 :(得分:1)

更一般地说,如果您尝试将c(1,2,3,4,5,6)形式的向量转换为c(1,1,2,2,3,3),就好像每天有两次试验一样,那么您可能希望使用整数除法来表达:

> x <- 1:6
> x
[1] 1 2 3 4 5 6
> (x-1) %/% 2 + 1
[1] 1 1 2 2 3 3

答案 3 :(得分:0)

好的,所以我找到了一个解决方案,如果我这样做了

(d$trial>=3)+1

它将布尔值转换为整数并且它可以工作......但是,有更好的方法吗?