首页 > 解决方案 > R中值的堆叠函数

问题描述

我正在使用来自不同数据集的值创建一个新列。现在,我在数据集中的正确位置添加了所有值,但它仍然分布在不同的列中。这必须成为一列。

我想要这个(图片比imo更容易)。

在此处输入图像描述

到目前为止,我曾经pull从列中获取值,然后cbind将它们全部编织在一起,所以基本上我的结构与开始时的结构相同,只是现在只有需要排成一行的值。

我对下一步的想法是stack所有变量,然后删除所有 NA(na.omitdrop_na),然后创建一个新列,mutate例如df <- mutate(df, VRM = valueswithoutNA $ VRMvalues)

但是,我被困在stack,因为我收到一个错误:

参数暗示不同的行数:511370, 0

解决此错误或以不同方式解决我的问题的提示?

编辑:玩具示例

dfcol1 <- c("St1", "St2", "St3", "St4", "St5", "St6",
                              "St7", "St8", "St9", "St10", "St11")
dfcol2 <- c("S1", "S2", "S3", "t4", "S5", "S6",
            "S7", "S8", "S9", "S10", "S11")

df_with_new_column <- cbind(dfcol1, dfcol2)

aa <- c(1,2,3, NA,NA,NA,NA,NA,NA,NA,NA)
bb <- c(NA,NA,NA,1,2,3,NA,NA,NA,NA,NA)
cc <- c(NA,NA,NA,NA,NA,NA,1,2,3,NA,NA)
dd <- c(NA,NA,NA,NA,NA,NA,NA,NA,NA,1,2)

abcd <- cbind(aa,bb,cc,dd)

标签: rstack

解决方案


打包dplyrcoalesce完美解决此问题的功能。

library(dplyr)

m <- matrix(NA, 4, 3)
diag(m) <- 1:3
m[4, 3] <- 4
m

Reduce(coalesce, as.data.frame(m))
#[1] 1 2 3 4

使用问题中的数据,但df_with_new_column创建为实际的 data.frame,它变为:

df_with_new_column <- data.frame(dfcol1, dfcol2)

df_with_new_column$newcol <- Reduce(coalesce, as.data.frame(abcd))

df_with_new_column
#   dfcol1 dfcol2 newcol
#1     St1     S1      1
#2     St2     S2      2
#3     St3     S3      3
#4     St4     t4      1
#5     St5     S5      2
#6     St6     S6      3
#7     St7     S7      1
#8     St8     S8      2
#9     St9     S9      3
#10   St10    S10      1
#11   St11    S11      2

推荐阅读