更改数据框列表中的列类

时间:2016-12-05 00:44:25

标签: r class

我有一个数据框列表,例如

false

我想知道是否有一种很好的方法可以将类从一个因素更改为另一个因素。这就是我的尝试:

df1 = data.frame(ID=c("id1", "id2", "id3"), A1 = c("A", "A", "B"), A2 = c("AA", "AA", "AA"))
df2 = data.frame(ID=c("id2", "id3", "id4"), A1 = c("B", "B", "B"), A2=c("BB", "BB", "BB"))
df3 = data.frame(ID=c("id1", "id2", "id3"), A1 = c("A", "A", "A"), A2 = c("AA", "BB", "BB"))
listDF = list(df1, df2, df3)

此代码为我提供了我想要更改的列,但有没有办法只更改类而不必重新附加这些新列?

3 个答案:

答案 0 :(得分:1)

来自mutate_at()包的

dplyr函数在这里很方便:

library(dplyr)
d <- lapply(listDF, function(df) mutate_at(df, .cols = 2:3, as.character))

您还可以将列名称传递给.cols参数:

d <- lapply(listDF, function(df) mutate_at(df, .cols = c("A1", "A2"), as.character))

或者按正则表达式选择列:

# mutate columns whose names start with A
d <- lapply(listDF, function(df) mutate_at(df, vars(matches("^A")), as.character))

在基数R中,这可能是:

d <- lapply(listDF, function(df) {df[c("A1", "A2")] <- lapply(df[c("A1", "A2")], as.character); df})

答案 1 :(得分:1)

我们可以使用data.table

lapply(listDF, function(df) setDT(df)[, (2:3) := lapply(.SD, as.character), .SDcols = 2:3]) 

答案 2 :(得分:0)

list.update软件包中的rlist函数提供了一个方便的选择。

  names(listDF) <- c("df1", "df2", "df3")
  d <- list.update(listDF,A1 = as.factor(A1), A2 = as.factor(A2))