【问题标题】:stacking function for values in R [duplicate]R中值的堆叠函数[重复]
【发布时间】:2019-07-04 07:28:19
【问题描述】:

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

我想要this(图片比文字更容易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)

【问题讨论】:

  • 我明白你的逻辑,但你想如何合并这些值?它们是您要添加的数字吗?想要合并的文本?
  • 什么是你不想要的值?所有的 NA 还是其他?将您的矩阵/数据框/小标题作为输入以及您想要的输出作为玩具示例,这对我们来说会更容易
  • @boski 我想在一列中加起来的值都是数字。
  • @Henry 我不想要的唯一值是 NA。我会尝试制作一个玩具示例。
  • @Cath,我认为你是对的,谢谢

标签: r stack


【解决方案1】:

dplyr 封装为函数coalesce 非常适合这个问题。

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

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-04-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多