【发布时间】:2016-08-05 22:33:57
【问题描述】:
合并两个数据框后,我得到:
d.f <- data.frame(sex = c("M", "F", NA, NA),
age = c(NA, NA, "old", "young"),
n = c(2, 1, 3, 4))
...但想将前两个变量合二为一,结果如下:
sex.age n
sex.M 2
sex.F 1
age.old 3
age.young 4
这似乎是一个简单(并且可能很常见)的问题,但我真的很难找到答案。我认为按照 tidyr 和 reshape 的方式已经准备好了一些东西,但我没有找到它——可能是因为最终的结构非常不整洁。
数据结构将保持不变,这意味着 NA 始终位于不同的行中。像
这样的解决方案na.omit(unlist(d.f[1:2]))
或
apply(d.f[, 1:2], 1, function(x) x[!is.na(x)])
工作,但没有简单的方法来获取变量名前缀。
【问题讨论】:
-
我认为数据结构根本不是“常见的”,而是一种病态的情况。
-
这是
list(data.frame(sex = c("M", "F"), n = c(2,1)), data.frame(age = c("old", "young"), n = c(3,4))) %>% dplyr::bind_rows()的结果,因此并非完全不合理。有趣的是,data.table::rbindlist()通过折叠 NA 并保留第一个变量名来处理这种情况。不知道怎么总结,想听听其他意见。