R:变异列并放置在特定列之前并根据这些特定列命名它们
Posted
技术标签:
【中文标题】R:变异列并放置在特定列之前并根据这些特定列命名它们【英文标题】:R: mutate columns and place before specific columns and name them based on these specific columns 【发布时间】:2021-05-22 11:44:36 【问题描述】:假设如下数据结构:
structure(list(`1.a` = c("a", NA, "a"), `1.b` = c("b", "b", NA
), `2` = c("ba", "ba", "ab"), `3.a` = c("a", "a", NA), `3.b` = c("b",
NA, "b")), row.names = c(NA, -3L), class = c("tbl_df", "tbl",
"data.frame"))
# A tibble: 3 x 5
`1.a` `1.b` `2` `3.a` `3.b`
<chr> <chr> <chr> <chr> <chr>
1 a b ba a b
2 NA b ba a NA
3 a NA ab NA b
现在,对于带有 .a 等的列,我想在 .a 列前面创建一个名为 X 的列(点之前的部分/编号)并将单元格值粘贴在一起,保持“顺序” .我想要的结果:
# A tibble: 3 x 7
`1` `1.a` `1.b` `2` `3` `3.a` `3.b`
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 ab a b ab ab a b
2 b NA b a a a NA
3 a a NA b b NA b
【问题讨论】:
这能回答你的问题吗? Sort columns of a dataframe by column name 【参考方案1】:基本 R 选项
do.call(
cbind,
unname(
lapply(
split.default(df, gsub("\\..*", "", names(df))),
function(x)
if (length(x) > 1)
cbind(
setNames(
data.frame(
apply(x, 1, function(v) paste0(na.omit(unlist(v)), collapse = ""))
),
unique(gsub("\\..*", "", names(x)))
),
x
)
else
x
)
)
)
给予
1 1.a 1.b 2 3 3.a 3.b
1 ab a b ba ab a b
2 b <NA> b ba a a <NA>
3 a a <NA> ab b <NA> b
【讨论】:
以上是关于R:变异列并放置在特定列之前并根据这些特定列命名它们的主要内容,如果未能解决你的问题,请参考以下文章
如果列中的值小于特定值,如何转到csv文件中的特定列并打印整行