【发布时间】:2017-10-12 18:38:26
【问题描述】:
我想向混合列类型的现有数据框(或小标题)添加一行,该数据框仅包含每个“列”的字符。这就是我让它工作的方式,这应该足够好,但似乎这应该更容易。
df 代表了我之前创建的一个更复杂的数据框。
df <- read_csv("12, 34, 10\n10, 29, 14",
col_names = c("part_1",
"part_2",
"part_3"))
c_name <- colnames(df)
info <- read_csv("blue, green, small\n0,0,0",
col_names = c_name) %>%
filter(part_1 > 0)
results <- data.table::rbindlist(list(info, df))
生成正确的输出:
part_1 part_2 part_3
blue green small
12 34 10
10 29 14
但就像我说的,在我看来,在 tidyverse 中应该有更简单的方法来做到这一点。当我使用 bind_rows 尝试这个时,我得到了错误:
“bind_rows_(x, .id) 中的错误: 无法自动将“part_1”列中的字符转换为整数。
有什么建议吗?
【问题讨论】:
-
bind_rows和bind_cols不会隐式转换您的列类型。您正在尝试将字符列与整数列绑定。使用mutate_all将整数转换为字符,然后再使用:bind_rows(list(info, mutate_all(df, as.character)))。 -
如果您正在为某些报告或其他内容执行此操作,更好的方法可能是使列名称中包含换行符:
names(df) = paste(names(df), c("blue", "green", "small"), sep = "\n")。这将保留您的列类并可能正确打印(取决于您的输出格式)。