1

我正在寻找 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列中的值 whenA1并且A2具有 and 的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
4

2 回答 2

2

如果您有大型数据表,并且速度很重要,我会推荐 data.table。这是它的样子。

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 解决方案的时间。

于 2013-08-27T20:20:34.647 回答
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
于 2013-08-27T19:58:28.987 回答