r - 如何在R中组合具有特定名称的行
问题描述
我有一个数据框,其中包含来自循环的一些重复行:
v1 v2 v3 v4
Number 1 2 3 5
Index 0 0 0 0
Number.1 1 2 3 5
Index.1 0 0 0 0
Number.2 1 2 3 5
Index.2 0 0 0 0
Number.3 1 2 3 5
Index.3 0 0 0 0
Number.4 1 2 3 5
Index.4 0 0 0 0
Number.5 1 2 3 5
Index.5 0 0 0 0
我想将所有具有“数字”的行附加为一行值,每个值都在一个不同的列中
v1 v2 v3 v4 v5 v6 v7 v8
Number 1 2 3 5 1 2 3 5 etc
我还没有找到任何简单的方法来做到这一点,虽然它看起来很容易。我尝试像这样使用 dplyr 没有成功:
df[,rownames(df)%in%(grep("Number*", rownames(df))]
解决方案
我们采用转置和连接 ( c
) 得到一个vector
i1 <- rownames(df)%in%(grep("Number(\\.\\d)*", rownames(df), value = TRUE))
v1 <- c(t(df[i1, ]))
注意:grep
返回索引,因此无需%in%
再次匹配行名
i2 <- grep("Number(\\.\\d)*", rownames(df))
子集就足够了
v2 <- c(t(df[i2, ]))
最好将其作为矢量而不是作为 data.frame。如果我们真的需要一个包含尽可能多列的单行 data.frame
as.data.frame.list(v1)
注意 2:稍微更改了模式以匹配.
后面的数字(如果有)。在 OP 的代码中,它会检查Number*
,即 0 或更多 'r'(尽管它在数据中有效)