通过for循环在df中按名称转换列的类型

时间:2018-12-15 20:17:55

标签: r

我尝试转换df中特定列的类型。因此,我创建了一个带有我想更改的列名的向量,然后遍历它。但是,不用更改类型,而是使用此代码创建一个新的cloumn“ i”。

为什么这行不通?

iris <- tbl_df(iris)

cols.to.change = c("Petal.Width", "Species")

for (i in cols.to.change) {
  iris <- transform(iris, i = as.character(i))
}

在没有循环的情况下它起作用。

iris <- transform(iris, Petal.Width = as.character(Petal.Width))

2 个答案:

答案 0 :(得分:1)

如何对列进行子集设置,将其强制为所需的任何类并将结果覆盖到原始data.frame中呢?

cols.to.change = c("Petal.Width", "Species")

for (i in cols.to.change) {
  iris[, i] <- as.character(iris[, i])
}

> 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 : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : chr  "0.2" "0.2" "0.2" "0.2" ...
 $ Species     : chr  "setosa" "setosa" "setosa" "setosa" ...

答案 1 :(得分:1)

您可以将列表中的所有列转换为字符,而无需进行for循环,如下所示:

iris[cols.to.change] <- lapply(iris[cols.to.change], as.character)

希望有帮助。