一次对多列数据帧进行操作

时间:2019-11-05 23:50:55

标签: r list dataframe apply lapply

假设我有一个数据帧列表,并且我想同时对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之类的列。

2 个答案:

答案 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)