我想合并两行或更多行,以便将变量(v1..5)的数值相加,并将因子级别的字符值相结合,如下所示:
R1,0 1 1 1 1,d e f
R2,1 3 0 1 2,l k s
结合R1和R2
R1R2,2 4 1 2 3 dl ek fs
[在此处输入图片描述] [1]
答案 0 :(得分:1)
一种dplyr
可能是:
df %>%
group_by(group = gl(n()/2, 2)) %>%
mutate_at(vars(starts_with("v")), sum) %>%
mutate_at(vars(starts_with("f")), toString) %>%
summarise_all(first) %>%
ungroup() %>%
select(-group)
v1 v2 v3 v4 v5 fa fb fc
<int> <int> <int> <int> <int> <chr> <chr> <chr>
1 2 4 1 2 3 d, l e, k f, s
此处将每两行分配到同一组中,对以v
开头的变量求和,并连接以f
开头的变量。
或基于变量类的相同:
df %>%
group_by(group = gl(n()/2, 2)) %>%
mutate_if(is.numeric, sum) %>%
mutate_if(is.character, toString) %>%
summarise_all(first) %>%
ungroup() %>%
select(-group)
答案 1 :(得分:0)
使用基数R lapply
,我们可以检查列的类别并采取相应措施
data.frame(lapply(df, function(x)
if(is.numeric(x)) sum(x) else paste0(x, collapse = "")))
# v1 v2 v3 v4 v5 fa fb fc
#1 2 4 1 2 3 dl ek fs
如果我们想对每n
行执行此操作,则可以使用aggregate
n <- 2
aggregate(.~rep(seq_len(nrow(df)), each = n, length.out = nrow(df)), df,
function(x) if(is.numeric(x)) sum(x) else paste0(x, collapse = ""))[-1]