假设我有一个数据帧列表,并且我想同时对1,2和4列进行一些操作,以及对3,5和6列进行一些其他操作。
让我们说我想将1,2,4列乘以2,并将3,5和6列乘以3。
使用lapply,我可以一次执行以下一项操作,但不能同时执行两项操作:
A<- apply(list, function(x) {2*X[,c(1,2,4)] 3*X[,c(3,5,6)]})
这会给出错误消息,例如无法识别的数字常量。我如何同时做所有这些。这是因为如果我执行其中之一,则将返回1,2,4之类的列。
答案 0 :(得分:1)
我们可以用cbind
将两个子集乘以它们的常数后合并。
lapply(list_df, function(df) cbind(df[c(1, 2, 4)] * 2, df[c(3, 5, 6)] * 3))
#[1]]
# a b d c e f
#1 2 8 20 21 15 18
#2 4 10 22 24 18 21
#3 6 12 24 27 21 24
#[[2]]
# a b d c e f
#1 2 8 20 21 15 18
#2 4 10 22 24 18 21
#3 6 12 24 27 21 24
数据
df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12, e = 5:7, f = 6:8)
list_df <- list(df, df)
答案 1 :(得分:0)
为什么不简化事情并保持列顺序?以下假设数据帧只有6列,并且它们都需要相乘。
l <- list(df,df)
lapply(l, function(x) x*c(2,2,3,2,3,3))
输出
[[1]]
X1 X2 X3 X4 X5 X6
2 4 9 8 15 18
[[2]]
X1 X2 X3 X4 X5 X6
2 4 9 8 15 18
数据
df <- data.frame(1,2,3,4,5,6)