R:变异列并放置在特定列之前,并根据这些特定列命名它们
假设以下数据结构:R:变异列并放置在特定列之前,并根据这些特定列命名它们,r,R,假设以下数据结构: 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, &q
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
结构(列表(`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”))
#一个tibble:3x5
`1.a``1.b``2``3.a``3.b`
1 a b ba a b
2不适用b不适用a不适用
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
#一个tible:3 x 7
`1``1.a``1.b``2``3.a``3.b```
1 ab a b ab a b
2 b不适用b a不适用
3 a不适用b不适用b
基本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
}
}
)
)
)
给予
11.a1.b23.a3.b
1 ab a b ba ab a b
2 b ba a a
3 a ab b
这是否回答了您的问题?
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