在 R data.frame 中添加新列会转换所有其他列的类型
Adding a new column in R data.frame converts the type of all other columns
我 运行 遇到了一个我无法解释的问题:
我有一个 data.frame 数字列并以任何方式添加一个新列($ operator, cbind ...)将所有其他列的类型更改为字符
> ab_dt = data.frame(ab_mat)
> unique(apply(ab_dt, 2, class))
[1] "numeric"
> a = meta[rownames(ab_dt), "Location"]
> class(a)
[1] "factor"
> ab_dt$Location = a
> unique(apply(ab_dt, 2, class))
[1] "character"
有人知道为什么会这样吗?
这与你如何计算class有关。我建议改用 sapply
。使用 tibble
而不是 data.frame
可以让您在打印时始终跟踪第 class 列:
data <- data.frame(
a = factor("foo", levels = c("foo", "bar")),
b = "baz"
)
data
#> a b
#> 1 foo baz
unique(apply(data, 2, class))
#> [1] "character"
sapply(data, class)
#> a b
#> "factor" "character"
tibble::as_tibble(data)
#> # A tibble: 1 x 2
#> a b
#> <fct> <chr>
#> 1 foo baz
```
我 运行 遇到了一个我无法解释的问题: 我有一个 data.frame 数字列并以任何方式添加一个新列($ operator, cbind ...)将所有其他列的类型更改为字符
> ab_dt = data.frame(ab_mat)
> unique(apply(ab_dt, 2, class))
[1] "numeric"
> a = meta[rownames(ab_dt), "Location"]
> class(a)
[1] "factor"
> ab_dt$Location = a
> unique(apply(ab_dt, 2, class))
[1] "character"
有人知道为什么会这样吗?
这与你如何计算class有关。我建议改用 sapply
。使用 tibble
而不是 data.frame
可以让您在打印时始终跟踪第 class 列:
data <- data.frame(
a = factor("foo", levels = c("foo", "bar")),
b = "baz"
)
data
#> a b
#> 1 foo baz
unique(apply(data, 2, class))
#> [1] "character"
sapply(data, class)
#> a b
#> "factor" "character"
tibble::as_tibble(data)
#> # A tibble: 1 x 2
#> a b
#> <fct> <chr>
#> 1 foo baz
```