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

标签 r dataframe apply

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

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

现在我想通过使用 apply 而不是显式的 for 循环来清理这段代码。
mydata[, ids]<-apply(mydata[, ids], 2, as.factor)

但是,最后一条语句给了我一个 data.frame,其中类型是字符而不是因子。我看不出这两行代码之间的区别。为什么它们不会产生相同的结果?

亲切的问候,
迈克尔

最佳答案

apply的结果是向量或数组或值列表(请参阅 ?apply )。

对于您的问题,您应该使用 lapply反而:

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 ...

请注意,这是lapply 所在的地方。将比 for 快得多环形。通常,循环和 lapply 将具有相似的性能,但 <-.data.frame操作很慢。通过使用 lapply一避免<-每次迭代中的操作,并将其替换为单个赋值。这要快得多。

关于r - 如何使用apply分解R中data.frame中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979438/

相关文章:

python - 在 apply 函数 pandas python 中包含组名

R:应用函数中 as.POSIXct() 的最佳方法

r - R 中的函数工厂

python-3.x - 派斯帕克 : Pass dynamic Column in UDF

python - 如何沿列轴连接两个具有不同索引的数据框

python - 将函数应用于数据框列

r - apply() 为每一列提供 NA 值

r - 在 R 中流式处理大型 csv 文件

r - 根据R中的id组合行

r - 在 R 中为马尔可夫模型创建转换矩阵