如何在R中的data.frame中的两个级别之间切换?

时间:2014-06-23 23:31:45

标签: r

我有一个数据框

>id=c(1,2,1,1,2);type=c("B","S","S","B","B")
>temp=data.frame(id, type)
  id type
1  1    B
2  2    S
3  1    S
4  1    B
5  2    B

所以类型有两个级别:B和S.对于每一行,如果id == 2,我想切换级别并让它的id = 1,并得到这样的结果:

  id type
1  1    B
2  1    B
3  1    S
4  1    B
5  1    S

我试过编码:

 >for (i in 1:nrow(temp)) {
   if (temp[i,1]==2) 
     {if (temp[i,2]=="B") temp[i,2]=="S" 
      else temp[i,2]=="B";temp[i,1]=1;} }

但它没有用。它返回了这个:

  id type
1  1    B
2  1    S
3  1    S
4  1    B
5  1    B

temp [i,1]已经改变但是temp [i,2]保持不变。我该如何解决?有没有更简单的方法来做到这一点因为我的代码看起来很笨拙?提前致谢。 -Natalia

1 个答案:

答案 0 :(得分:1)

我认为这会奏效。虽然,也许有一种更简单的方法。

id=c(1,2,1,1,2); type=c("B","S","S","B","B")
temp=data.frame(id, type, stringsAsFactors = FALSE)

temp$type2 <- ifelse(temp$type == 'B', 'S', 'B')
temp
#  id type type2
#1  1    B     S
#2  2    S     B
#3  1    S     B
#4  1    B     S
#5  2    B     S

temp2 <- temp[,1:2]   
temp2$type <- ifelse(temp$id   ==   2, temp$type2, temp$type)
temp2$id   <- 1
temp2

#  id type
#1  1    B
#2  1    B
#3  1    S
#4  1    B
#5  1    S