我想做的是获取一个数据框,我们称它为 x 并将函数 y 应用于某些列。我需要能够轻松地指定要对哪些列进行操作-希望通过将列号作为向量或列表传递。
例如,我可能希望将 10 添加到第 1、3、5 和 6 列,但保持第 2 和 4 列不变。
我怀疑我需要使用 apply 功能 - 我不确定如何执行此操作的详细信息。
非常感谢这里的任何指导!
我想做的是获取一个数据框,我们称它为 x 并将函数 y 应用于某些列。我需要能够轻松地指定要对哪些列进行操作-希望通过将列号作为向量或列表传递。
例如,我可能希望将 10 添加到第 1、3、5 和 6 列,但保持第 2 和 4 列不变。
我怀疑我需要使用 apply 功能 - 我不确定如何执行此操作的详细信息。
非常感谢这里的任何指导!
只需使用[<-
. 它是矢量化的,例如
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")
,排序无关紧要。
使用[<-
如
> 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