合并两个数据框后,我得到以下信息:
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
看来这是一个简单(可能很常见)的问题,但我真的很难找到答案。我以为在整理和整形之前已经准备好了一些东西,但我没有找到它-可能是因为最终的结构很不整齐。
数据结构将保持不变,这意味着NA始终位于不同的行中。解决方案如
na.omit(unlist(d.f[1:2]))
或者
apply(d.f[, 1:2], 1, function(x) x[!is.na(x)])
确实可以,但是没有简单的方法来获取变量名的前缀。
这是使用的选项dplyr/tidyr
。我们使用“ Var”和“ Val”列将“宽”格式转换为“长”格式gather
,unite
以创建“ sex.age”并重新排列列顺序。
library(dplyr)
library(tidyr)
gather(d.f, Var, Val, -n, na.rm = TRUE) %>%
unite(sex.age, Var, Val, sep=".") %>%
select(2:1)
# sex.age n
#1 sex.M 2
#2 sex.F 1
#7 age.old 3
#8 age.young 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句