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

假设我有一个数据帧列表,并且我想同时对1,2和4列进行一些操作,以及对3,5和6列进行一些其他操作。

让我们说我想将1,2,4列乘以2,并将3,5和6列乘以3。

使用lapply,我可以一次执行以下一项操作,但不能同时执行两项操作:

A<- apply(list,function(x) {2*X[,c(1,4)] 3*X[,c(3,5,6)]}) 

这会给出错误消息,例如无法识别的数字常量。我如何同时做所有这些。这是因为如果我执行其中之一,则将返回1,4之类的列。

downcrazy 回答:一次对多列数据帧进行操作

我们可以用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)
,

为什么不简化事情并保持列顺序?以下假设数据帧只有6列,并且它们都需要相乘。

l <- list(df,df)
lapply(l,function(x) x*c(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,4,6)
本文链接:https://www.f2er.com/3155744.html

大家都在问