2013-08-27 45 views
1

我lloking为解决这一问题,R.我有这样一个数据帧:连续替换值时,两列具有特定值

A1 A2 A3 A4 
22 a 1 1 
22 b 3 3 
21 c 1 2 
23 w 1 1 
22 a 4 4 

我寻找一种方式来改变值为A1列,当A1A2具有值22a。在这种情况下,当这个cristeris是得到A1将有19值,数据帧将是这样的:

A1 A2 A3 A4 
19 a 1 1 
22 b 3 3 
21 c 1 2 
23 w 1 1 
19 a 4 4 

回答

1
example <- data.frame(A1=c(22,22,21,23,22),A2=c("a","b","c","w","a"),A3=c(1,3,1,1,4),A4=c(1,3,2,1,4)) 

example$A1[example$A1==22 & example$A2=="a"] <- 19 

> example 
    A1 A2 A3 A4 
1 19 a 1 1 
2 22 b 3 3 
3 21 c 1 2 
4 23 w 1 1 
5 19 a 4 4 
2

如果您有大量的数据表和速度的问题,我会建议数据。表。这是它的样子。

library(data.table) 
example <- data.table(example) 
setkey(example,A1,A2) 
example[J(22,"a"), A1 := 19] #uses binary search, faster than example[A1 ==22 & A2 == "a", A1 := 19] 

> example 
    A1 A2 A3 A4 
1: 19 a 1 1 
2: 22 b 3 3 
3: 21 c 1 2 
4: 23 w 1 1 
5: 19 a 4 4 

随意比较更大数据集上data.frame和data.table解决方案的时间。

+1

+1随着''我矢量扫描(通常不鼓励)的警告。根据简介小插曲,使用'setkey'进行二进制搜索的性能会更好。 –

+1

感谢您的提示马修。进行更新。 – user2627717