gpt4 book ai didi

r - 自动合并数据

转载 作者:行者123 更新时间:2023-12-04 01:15:41 25 4
gpt4 key购买 nike

我经常遇到包含多个列的数据框,这些列需要合并为一个列。合并的顺序基于有效条目的数量,具有最有效条目的变量优先。我编写了代码来为每个变量提供有效条目的计数,并根据此输出手动定义要合并变量的顺序。我想知道是否有一种方法可以自动执行此步骤,这样我就不需要手动输入订单来合并?下面是一个示例数据集。

df <- data.frame(1:16)
df$A <- c(10,0,0,0,0,0,12,12,0,14,NA_real_,14,NA_real_,NA_real_,16,16)
df$B <- c(10,0,0,0,12,12,12,12,0,14,NA_real_,14,16,16,16,16)
df$C <- c(10,12,14,16,10,12,14,16,10,12,14,16,10,12,14,16)

A B C
10 10 10
0 0 12
0 0 14
0 0 16
0 12 10
0 12 12
12 12 14
12 12 16
0 0 10
14 14 12
NA NA 14
14 14 16
NA 16 10
NA 16 12
16 16 14
16 16 16

我一直在使用下面的代码确定哪个变量具有最有效的条目(NA 值和 0 被视为相同):

sum(df$A > 0, na.rm = TRUE)
#7
sum(df$B > 0, na.rm = TRUE)
#11
sum(df$C > 0, na.rm = TRUE)
#16

为了合并数据,我使用了代码:

df %>% mutate(new_value = coalesce(C,B,A))

A B C new_value
10 10 10 10
0 0 12 12
0 0 14 14
0 0 16 16
0 12 10 10
0 12 12 12
12 12 14 14
12 12 16 16
0 0 10 10
14 14 12 12
NA NA 14 14
14 14 16 16
NA 16 10 10
NA 16 12 12
16 16 14 14
16 16 16 16

最佳答案

您可以使用 colSums 获取 df 中大于 0 的值的个数,以递减对它们进行排序 code> 排序并存储列名 (cols)。根据 cols 对数据进行子集化,并使用 coalescedo.call

cols <- names(sort(colSums(df[-1] > 0, na.rm  =TRUE), decreasing = TRUE))
df$new_value <- do.call(dplyr::coalesce, df[cols])

我们使用 -1 来排除具有值 1:16 的第一列。这适用于任意数量的列。

关于r - 自动合并数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63446716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com