如何使用apply分解R中data.frame中的特定列

如何使用apply分解R中data.frame中的特定列,r,dataframe,apply,R,Dataframe,Apply,我有一个名为mydata的data.frame和一个包含data.frame中要转换为因子的列的索引的向量ID。下面的代码解决了这个问题 for(i in ids) mydata[, i]<-as.factor(mydata[, i]) 对于(id中的i)mydata[,i]应用的结果是一个向量、数组或值列表(请参见?应用) 对于您的问题,您应该使用lappy: data(iris) iris[, 2:3] <- lapply(iris[, 2:3], as.factor) str

我有一个名为mydata的data.frame和一个包含data.frame中要转换为因子的列的索引的向量ID。下面的代码解决了这个问题

for(i in ids) mydata[, i]<-as.factor(mydata[, i])

对于(id中的i)mydata[,i]应用的结果是一个向量、数组或值列表(请参见
?应用

对于您的问题,您应该使用
lappy

data(iris)
iris[, 2:3] <- lapply(iris[, 2:3], as.factor)
str(iris)

'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : Factor w/ 23 levels "2","2.2","2.3",..: 15 10 12 11 16 19 14 14 9 11 ...
 $ Petal.Length: Factor w/ 43 levels "1","1.1","1.2",..: 5 5 4 6 5 8 5 6 5 6 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
数据(iris)
iris[,2:3]这是因为apply()的工作原理完全不同。它将首先在本地环境中执行函数as.factor,从中收集结果,然后尝试将它们合并到数组中,而不是数据帧中。在您的例子中,这个数组是一个矩阵。R遇到不同的因素,除了首先将它们转换为字符,没有其他方法可以找到它们。该字符矩阵用于填充数据帧

您可以使用lappy(参见Andrie的答案)或plyr函数中的colwise

require(plyr)
Df[,ids] <- colwise(as.factor)(Df[,ids])
require(plyr)
Df[,ids]
require(plyr)
Df[,ids] <- colwise(as.factor)(Df[,ids])