r - R中值的堆叠函数
问题描述
我正在使用来自不同数据集的值创建一个新列。现在,我在数据集中的正确位置添加了所有值,但它仍然分布在不同的列中。这必须成为一列。
我想要这个(图片比imo更容易)。
到目前为止,我曾经pull
从列中获取值,然后cbind
将它们全部编织在一起,所以基本上我的结构与开始时的结构相同,只是现在只有需要排成一行的值。
我对下一步的想法是stack
所有变量,然后删除所有 NA(na.omit
或drop_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)
解决方案
打包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
推荐阅读
- sql - 在 Case 语句中使用列别名作为表的其他列中的值
- java - 在 Android Studio (Java) 上创建注册页面
- android - Unity突然FPS下降
- java - Spring:创建在类路径资源中定义的名称为“entityManagerFactory”的bean时出错
- r - 按组转置两个变量
- java - 如何通过 wifi 与 REV 机器人控制中心通信?
- c - 将 uint8_t 便携式重新解释为 int8_t 并强制补码
- chart.js - 如何为chart.js中堆叠条的所有标签创建数据集?
- solr - 我应该使用哪个查询解析器来获得类似于带有 solr 的 db2 的结果
- docker - 在 debian buster 的 docker 中缺少带有 wkhtmltopdf 的 Qt 库