首页 > 解决方案 > 将几个数据框的最后一列转换为 R 中的一个因子

问题描述

我在 R、df1、df2、df3 中有三个数据框,它们包含不同的数据,但是,最后一列包含每个数据集的目标变量。但是,在每种情况下,最后一列都是整数,我希望它成为一个因素。我知道我可以执行以下代码将列转换为因子:

df1[,'lascoldf1'] <-factor(df1[,'lastcoldf1'])
df2[,'lascoldf2'] <-factor(df2[,'lastcoldf2'])
df3[,'lascoldf3'] <-factor(df3[,'lastcoldf3'])

但是,这似乎有点低效。此外,最后一个 colname 并不总是相同的名称,并且每个数据集都有不同数量的列,所以我只需要一种引用最后一列的方法。我发现了这种方式,因此可能需要以下伪代码:

for (df in c(df1,df2,df3)){
index = df[,ncol(df)]
lapply(df[,index] , factor)
}

但是,我似乎无法让它正常工作。

标签: rloopsindexing

解决方案


将数据框放入 alistlapply用于ncol标识最后一列。

L <- lapply(list(df1, df2, df3), function(x) {x[,ncol(x)] <- as.factor(x[,ncol(x)]);x})
str(L[[1]])
# 'data.frame': 3 obs. of  4 variables:
#  $ X1: int  1 2 3
#  $ X2: int  4 5 6
#  $ X3: int  7 8 9
#  $ X4: Factor w/ 3 levels "10","11","12": 1 2 3

数据:

df1 <- df2 <- df3 <- data.frame(matrix(1:12, 3, 4))

推荐阅读