在R中选定的数据帧列上操作,而不影响其他列

时间:2013-08-14 12:43:24

标签: r

我想做的是采用数据帧,让我们称之为x并将函数y仅应用于某些列。我需要能够通过将列号作为向量或列表传递来轻松指定要操作的列。

例如,我可能希望在列1,3,5和6中添加10,但保持第2列和第4列不变。

我怀疑我需要使用apply函数 - 这是我不确定如何执行此操作的详细信息。

这里的任何指导都将非常感谢!

2 个答案:

答案 0 :(得分:2)

只需使用[<-即可。它是矢量化的,例如

set.seed(123)
df <- data.frame(   V1 = sample(5),
            V2 = sample(5),
            V3 = sample(5),
            V4 = sample(5) )
  V1 V2 V3 V4
1  2  1  5  5
2  4  3  2  1
3  5  4  3  4
4  3  2  4  3
5  1  5  1  2

df[ , c(1,4) ]  <- df[ , c(1,4)] + 10

  V1 V2 V3 V4
1 12  1  5 15
2 14  3  2 11
3 15  4  3 14
4 13  2  4 13
5 11  5  1 12

使用列号通常被认为是不好的做法。如果订单在将来的文件版本中发生变化怎么办?最好使用名称,例如c("V1" , "V4")然后排序无关紧要。

答案 1 :(得分:1)

中使用[<-
> set.seed(1)
> df <- data.frame(A=1:5, B=sample(0:9, 5), C=sample(0:9, 5), 
+                  D=sample(0:9, 5), E=sample(0:9, 5), F=sample(0:9, 5))
> df
  A B C D E F
1 1 2 8 2 4 9
2 2 3 9 1 6 1
3 3 4 5 5 7 5
4 4 6 4 9 2 0
5 5 1 0 4 9 8
> # Adding 10 to columns 1,3 and 5
> df[, c(1,3,5)] <- df[, c(1,3,5)]+10
> df
   A B  C D  E F
1 11 2 18 2 14 9
2 12 3 19 1 16 1
3 13 4 15 5 17 5
4 14 6 14 9 12 0
5 15 1 10 4 19 8